package org.neodatis.odb.core.layers.layer2.meta;

import java.util.Collection;

import org.neodatis.tool.wrappers.list.IOdbList;
import org.neodatis.tool.wrappers.list.OdbArrayList;
import org.neodatis.tool.wrappers.map.OdbHashMap;

/**
 * The main implementation of the MetaModel abstract class.
 * 
 * @author osmadja
 * 
 */
public class SessionMetaModel extends MetaModel {

	/**
	 * A list of changed classes - that must be persisted back when commit is
	 * done
	 */
	private OdbHashMap changedClasses;

	public SessionMetaModel() {
		super();
		changedClasses = new OdbHashMap();
	}

	/**
	 * Saves the fact that something has changed in the class (number of objects
	 * or last object oid)
	 * 
	 * @param classInfo
	 * @param uci
	 */
	public void addChangedClass(ClassInfo classInfo) {
		changedClasses.put(classInfo, classInfo);
		setHasChanged(true);
	}

	public Collection getChangedClassInfo() {
		IOdbList l = new OdbArrayList();
		l.addAll(changedClasses.keySet());
		// TODO return an unmodifianle collection
		// return Collections.unmodifiableCollection(l);
		return l;
	}

	public void resetChangedClasses() {
		this.changedClasses.clear();
		setHasChanged(false);
	}

	public MetaModel duplicate() {
		SessionMetaModel model = new SessionMetaModel();
		IOdbList classes = getAllClasses();
		for (ClassInfo ci : classes) {
			model.addClass((ClassInfo) ci.duplicate(false));
		}
		model.changedClasses = new OdbHashMap();
		model.changedClasses.putAll(changedClasses);
		return model;
	}
}

 

Ads help maintain this website.