/* Copyright (c) 2013 Boundless and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Distribution License v1.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/org/documents/edl-v10.html * * Contributors: * Victor Olaya (Boundless) - initial implementation */ package org.locationtech.geogig.api.plumbing.diff; import org.locationtech.geogig.storage.FieldType; import org.locationtech.geogig.storage.text.TextValueSerializer; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.vividsolutions.jts.geom.Geometry; public class AttributeDiffFactory { public static AttributeDiff attributeDiffFromText(Class<?> clazz, String s) { String[] tokens = s.split("\t"); AttributeDiff ad; if (Geometry.class.isAssignableFrom(clazz)) { ad = new GeometryAttributeDiff(s); } else { if (AttributeDiff.TYPE.REMOVED.name().startsWith(tokens[0])) { Preconditions.checkArgument(tokens.length == 2, "Wrong difference definition:", s); Object oldValue = TextValueSerializer.fromString(FieldType.forBinding(clazz), tokens[1]); ad = new GenericAttributeDiffImpl(Optional.fromNullable(oldValue), null); } else if (AttributeDiff.TYPE.ADDED.name().startsWith(tokens[0])) { Preconditions.checkArgument(tokens.length == 2, "Wrong difference definition:", s); Object newValue = TextValueSerializer.fromString(FieldType.forBinding(clazz), tokens[1]); ad = new GenericAttributeDiffImpl(null, Optional.fromNullable(newValue)); } else if (AttributeDiff.TYPE.MODIFIED.name().startsWith(tokens[0])) { Preconditions.checkArgument(tokens.length == 3, "Wrong difference definition:", s); Object oldValue = TextValueSerializer.fromString(FieldType.forBinding(clazz), tokens[1]); Object newValue = TextValueSerializer.fromString(FieldType.forBinding(clazz), tokens[2]); ad = new GenericAttributeDiffImpl(Optional.fromNullable(oldValue), Optional.fromNullable(newValue)); } else { throw new IllegalArgumentException("Wrong difference definition:" + s); } } return ad; } }