/*
 * Copyright 2014 MovingBlocks
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.terasology.persistence.internal;

import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.terasology.entitySystem.Component;

import java.util.Map;
import java.util.Set;

/**
 */
public class EntityDelta {
    private Set<Class<? extends Component>> removedComponents = Sets.newHashSet();
    private Map<Class<? extends Component>, Component> changedComponents = Maps.newHashMap();
    /**
     *
     * @param component a snapshot of the original entity component at the time when the entity delta got created.
     */
    public void setChangedComponent(Component component) {
        if (component == null) {
            throw new RuntimeException("component null");
        }
        Class<? extends Component> clazz = component.getClass();
        changedComponents.put(clazz, component);
    }

    public void removeComponent(Class<? extends Component> clazz) {
        changedComponents.remove(clazz);
        removedComponents.add(clazz);
    }

    public Map<Class<? extends Component>, Component> getChangedComponents() {
        return changedComponents;
    }

    public Set<Class<? extends Component>> getRemovedComponents() {
        return removedComponents;
    }
}

@@ -16,9 +16,9 @@
  201
-4
+7
  Mov
@@ -810,16 +810,8 @@
 t;%0A%0A
-/**%0A */%0A
 publ
@@ -1014,16 +1014,17 @@
 ();%0A
+%0A
     /**%0A
     
@@ -1023,15 +1023,8 @@
 /**%0A
-     *%0A
     
@@ -1278,22 +1278,69 @@
 on(%22
-component null
+Cannot set a changed component with a null component variable
 %22);%0A

Clarify an exception description