/* * Copyright (c) 2008-2012, 2014 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: * Simon McDuff - initial API and implementation * Eike Stepper - maintenance */ package org.eclipse.emf.cdo.internal.common.revision.delta; import org.eclipse.emf.cdo.common.model.CDOModelUtil; import org.eclipse.emf.cdo.common.model.CDOType; import org.eclipse.emf.cdo.common.protocol.CDODataInput; import org.eclipse.emf.cdo.common.revision.CDORevision; import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDeltaVisitor; import org.eclipse.emf.cdo.common.revision.delta.CDOUnsetFeatureDelta; import org.eclipse.emf.cdo.spi.common.revision.CDOReferenceAdjuster; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EStructuralFeature; import java.io.IOException; import java.util.List; /** * @author Simon McDuff */ public class CDOUnsetFeatureDeltaImpl extends CDOFeatureDeltaImpl implements CDOUnsetFeatureDelta { public CDOUnsetFeatureDeltaImpl(EStructuralFeature feature) { super(feature); } public CDOUnsetFeatureDeltaImpl(CDODataInput in, EClass eClass) throws IOException { super(in, eClass); } public Type getType() { return Type.UNSET; } public CDOFeatureDelta copy() { return new CDOUnsetFeatureDeltaImpl(getFeature()); } public Object applyTo(CDORevision revision) { EStructuralFeature feature = getFeature(); InternalCDORevision internalRevision = (InternalCDORevision)revision; if (feature.isUnsettable()) { internalRevision.unset(feature); } else { if (feature.isMany()) { Object value = internalRevision.getValue(feature); if (value != null) { @SuppressWarnings("unchecked") List<Object> list = (List<Object>)value; list.clear(); } } else { Object defaultValue = feature.getDefaultValue(); CDOType type = CDOModelUtil.getType(feature.getEType()); if (type != null) { defaultValue = type.convertToCDO(feature.getEType(), defaultValue); } internalRevision.set(feature, NO_INDEX, defaultValue); } } return null; } public void accept(CDOFeatureDeltaVisitor visitor) { visitor.visit(this); } @Override public boolean adjustReferences(CDOReferenceAdjuster adjuster) { return false; } @Override protected String toStringAdditional() { return null; } }