/* * Copyright (c) 2013 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.net4j.internal.db.ddl.delta; import org.eclipse.net4j.db.ddl.delta.IDBDelta; import org.eclipse.net4j.db.ddl.delta.IDBDeltaWithPosition; import org.eclipse.net4j.db.ddl.delta.IDBDeltaWithProperties; import org.eclipse.net4j.db.ddl.delta.IDBPropertyDelta; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author Eike Stepper */ public abstract class DBDeltaWithProperties extends DBDelta implements IDBDeltaWithProperties { private static final long serialVersionUID = 1L; private Map<String, IDBPropertyDelta<?>> propertyDeltas = new HashMap<String, IDBPropertyDelta<?>>(); public DBDeltaWithProperties(DBDelta parent, String name, ChangeKind changeKind) { super(parent, name, changeKind); } /** * Constructor for deserialization. */ protected DBDeltaWithProperties() { } public <T> DBPropertyDelta<T> getPropertyDelta(String name) { name = name(name); @SuppressWarnings("unchecked") DBPropertyDelta<T> propertyDelta = (DBPropertyDelta<T>)propertyDeltas.get(name); return propertyDelta; } public <T> T getPropertyValue(String name) { return getPropertyValue(name, false); } public <T> T getPropertyValue(String name, boolean old) { IDBPropertyDelta<T> propertyDelta = getPropertyDelta(name); if (propertyDelta == null) { return null; } if (old) { return propertyDelta.getOldValue(); } return propertyDelta.getValue(); } public final Map<String, IDBPropertyDelta<?>> getPropertyDeltas() { return Collections.unmodifiableMap(propertyDeltas); } public IDBPropertyDelta<?>[] getPropertyDeltasSortedByName() { DBPropertyDelta<?>[] result = propertyDeltas.values().toArray(new DBPropertyDelta[propertyDeltas.size()]); Arrays.sort(result); return result; } public final void addPropertyDelta(IDBPropertyDelta<?> propertyDelta) { String name = propertyDelta.getName(); propertyDeltas.put(name, propertyDelta); resetElements(); if (IDBDeltaWithPosition.POSITION_PROPERTY.equals(name)) { DBDelta parent = getParent(); if (parent != null) { parent.resetElements(); } } } @Override protected void collectElements(List<IDBDelta> elements) { elements.addAll(propertyDeltas.values()); } }