com.autentia.tnt.tracking.TrackChanges.java Source code

Java tutorial

Introduction

Here is the source code for com.autentia.tnt.tracking.TrackChanges.java

Source

/**
 * TNTConcept Easy Enterprise Management by Autentia Real Bussiness Solution S.L.
 * Copyright (C) 2007 Autentia Real Bussiness Solution S.L.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.autentia.tnt.tracking;

import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.apache.commons.lang.StringUtils;

import com.autentia.tnt.manager.security.AuthenticationManager;

public class TrackChanges {

    private Tracking dto;

    private boolean trackingActive = false;

    private Map<String, EntityChange> currentChanges = new HashMap<String, EntityChange>();

    private Set<EntityChange> changesHistory = new HashSet<EntityChange>(0);

    public TrackChanges(Tracking dto) {
        this.dto = dto;
    }

    public void commitChanges() {
        this.getChangesHistory().addAll(this.currentChanges.values());

    }

    public void beginChangesTracking() {
        this.trackingActive = true;
        currentChanges = new HashMap<String, EntityChange>();

    }

    public void addEntityChange(String field, String oldValue, String newValue) {
        this.addEntityChange(field, oldValue, newValue, "");

    }

    public void addEntityChange(String field, String oldValue, String newValue, String keyAux) {
        EntityChange entityChange = getEntityChange(field, oldValue, newValue, keyAux);
        if (entityChange != null) {
            addChange(entityChange);
        }
    }

    public EntityChange getEntityChange(String field, String oldValue, String newValue) {
        return getEntityChange(field, oldValue, newValue, null);
    }

    public EntityChange getEntityChange(String field, String oldValue, String newValue, String keyAux) {
        if (this.isTrackingActive()) {
            if (!StringUtils.equals(oldValue, newValue)) {
                final EntityChange change = new EntityChange();
                change.setField(field);
                change.setOldValue(oldValue);
                change.setNewValue(newValue);
                change.setEntityName(dto.getClass().getCanonicalName());
                change.setEntityId(dto.getId());
                change.setUser(AuthenticationManager.getDefault().getCurrentPrincipal().getUser());
                change.setInsertDate(new Date());
                change.setAuxKey(StringUtils.defaultIfEmpty(keyAux, ""));
                return change;
            }
        }
        return null;
    }

    private void addChange(EntityChange change) {
        String key = change.getField() + change.getAuxKey();
        EntityChange prev = currentChanges.get(key);
        if (prev != null) {
            prev.setNewValue(change.getNewValue());
        } else {
            prev = change;
        }
        if (!StringUtils.equals(prev.getOldValue(), prev.getNewValue())) {
            currentChanges.put(key, prev);
        } else {
            currentChanges.remove(prev.getField());
        }
    }

    public Set<EntityChange> getChangesHistory() {
        return this.changesHistory;
    }

    public void setChangesHistory(Set<EntityChange> history) {
        this.changesHistory = history;
    }

    public boolean isTrackingActive() {
        return this.trackingActive;
    }

    public void setTrackingActive(boolean trackingActive) {
        this.trackingActive = trackingActive;
    }

    public Map<String, EntityChange> getCurrentChanges() {
        return this.currentChanges;

    }

    public void setCurrentChanges(Map<String, EntityChange> changes) {
        this.currentChanges = changes;
    }

    public void clearCurrentChanges() {
        this.currentChanges.clear();
    }

}