All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.emfjson.jackson.JacksonOptions Maven / Gradle / Ivy

/*
 * 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;

import org.emfjson.EMFJs;
import org.emfjson.common.Options;
import org.emfjson.jackson.databind.deser.DefaultTypeDeserializer;
import org.emfjson.jackson.databind.deser.FragmentIdDeserializer;
import org.emfjson.jackson.databind.deser.IdDeserializer;
import org.emfjson.jackson.databind.deser.TypeDeserializer;
import org.emfjson.jackson.databind.deser.references.ReferenceAsObjectDeserializer;
import org.emfjson.jackson.databind.deser.references.ReferenceDeserializer;
import org.emfjson.jackson.databind.ser.DefaultTypeSerializer;
import org.emfjson.jackson.databind.ser.FragmentIdSerializer;
import org.emfjson.jackson.databind.ser.IdSerializer;
import org.emfjson.jackson.databind.ser.TypeSerializer;
import org.emfjson.jackson.databind.ser.references.ReferenceAsObjectSerializer;
import org.emfjson.jackson.databind.ser.references.ReferenceSerializer;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import static org.emfjson.EMFJs.*;

public class JacksonOptions extends Options {

	public final ReferenceSerializer referenceSerializer;
	public final ReferenceDeserializer referenceDeserializer;
	public final IdSerializer idSerializer;
	public final IdDeserializer idDeserializer;
	public final TypeSerializer typeSerializer;
	public final TypeDeserializer typeDeserializer;
	public final DateFormat dateFormat;

	protected JacksonOptions(JacksonOptions.Builder builder) {
		super(builder);

		this.referenceSerializer = builder.referenceSerializer;
		this.referenceDeserializer = builder.referenceDeserializer;
		this.idSerializer = builder.idSerializer;
		this.idDeserializer = builder.idDeserializer;
		this.typeSerializer = builder.typeSerializer;
		this.typeDeserializer = builder.typeDeserializer;
		this.dateFormat = builder.dateFormat;
	}

	public static JacksonOptions from(Map options) {
		return new Builder().build(options);
	}

	public static final class Builder extends AbstractBuilder {

		protected ReferenceSerializer referenceSerializer = new ReferenceAsObjectSerializer();
		protected ReferenceDeserializer referenceDeserializer = new ReferenceAsObjectDeserializer();
		protected IdSerializer idSerializer = new FragmentIdSerializer();
		protected IdDeserializer idDeserializer = new FragmentIdDeserializer();
		protected TypeSerializer typeSerializer = new DefaultTypeSerializer();
		protected TypeDeserializer typeDeserializer = new DefaultTypeDeserializer();
		protected DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

		@Override
		protected Builder getThis() {
			return this;
		}

		@Override
		public JacksonOptions build(Map options) {
			init(options);
			return new JacksonOptions(this);
		}

		@Override
		public JacksonOptions build() {
			return build(Collections.emptyMap());
		}

		@Override
		protected void init(Map options) {
			super.init(options);

			uriHandler = objectValue(options, OPTION_URI_HANDLER, null);
			referenceSerializer = objectValue(options, OPTION_REF_SERIALIZER, referenceSerializer);
			referenceDeserializer = objectValue(options, OPTION_REF_DESERIALIZER, referenceDeserializer);
			idSerializer = objectValue(options, OPTION_ID_SERIALIZER, idSerializer);
			idDeserializer = objectValue(options, OPTION_ID_DESERIALIZER, idDeserializer);
			dateFormat = objectValue(options, EMFJs.OPTION_DATE_FORMAT, dateFormat);
		}

		public Builder withReferenceSerializer(ReferenceSerializer serializer) {
			this.referenceSerializer = serializer;
			return getThis();
		}

		public Builder withReferenceDeserializer(ReferenceDeserializer deserializer) {
			this.referenceDeserializer = deserializer;
			return getThis();
		}

		public Builder withIdSerializer(IdSerializer serializer) {
			this.idSerializer = serializer;
			return getThis();
		}

		public Builder withIdDeserializer(IdDeserializer deserializer) {
			this.idDeserializer = deserializer;
			return getThis();
		}

		public Builder withTypeSerializer(TypeSerializer typeSerializer) {
			this.typeSerializer = typeSerializer;
			return getThis();
		}

		public Builder withTypeDeserializer(TypeDeserializer typeDeserializer) {
			this.typeDeserializer = typeDeserializer;
			return getThis();
		}

		public Builder withDateFormat(DateFormat dateFormat) {
			this.dateFormat = dateFormat;
			return getThis();
		}

	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy