/* * Copyright (c) 2015 Guillaume Hillairet. * 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: * Guillaume Hillairet - initial API and implementation * */ package org.emfjson.jackson.annotations; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.SerializerProvider; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.emfjson.jackson.databind.EMFContext; import org.emfjson.jackson.resource.JsonResource; import org.emfjson.jackson.utils.ValueReader; import org.emfjson.jackson.utils.ValueWriter; public class EcoreIdentityInfo { public static final String PROPERTY = "@id"; private static final ValueReader<Object, String> defaultValueReader = new ValueReader<Object, String>() { @Override public String readValue(Object value, DeserializationContext context) { return value.toString(); } }; private static final ValueWriter<EObject, Object> defaultValueWriter = new ValueWriter<EObject, Object>() { @Override public Object writeValue(EObject object, SerializerProvider context) { Resource resource = EMFContext.getResource(context, object); Object id; if (resource instanceof JsonResource) { id = ((JsonResource) resource).getID(object); } else { id = EMFContext.getURI(context, object).fragment(); } return id; } }; private final String property; private final ValueReader<Object, String> valueReader; private final ValueWriter<EObject, Object> valueWriter; public EcoreIdentityInfo() { this(null, null, null); } public EcoreIdentityInfo(String property) { this(property, null, null); } public EcoreIdentityInfo(String property, ValueReader<Object, String> valueReader) { this(property, valueReader, null); } public EcoreIdentityInfo(String property, ValueWriter<EObject, Object> valueWriter) { this(property, null, valueWriter); } public EcoreIdentityInfo(String property, ValueReader<Object, String> valueReader, ValueWriter<EObject, Object> valueWriter) { this.property = property == null ? PROPERTY: property; this.valueReader = valueReader == null ? defaultValueReader: valueReader; this.valueWriter = valueWriter == null ? defaultValueWriter: valueWriter; } public String getProperty() { return property; } public ValueReader<Object, String> getValueReader() { return valueReader; } public ValueWriter<EObject, Object> getValueWriter() { return valueWriter; } }