All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nuggets.delegate.DMap Maven / Gradle / Ivy

The newest version!
/*
 * DMap.java
 * Copyright (c) 2005 by University of Hamburg. All Rights Reserved.
 * Departament of Informatics. 
 * Distributed Systems and Information Systems.
 *
 * Created by walczak on Dec 5, 2005.  
 * Last revision $Revision: 6926 $ by:
 * $Author: braubach $ on $Date: 2008-09-28 22:16:58 +0200 (So, 28 Sep 2008) $.
 */
package nuggets.delegate;

import java.util.Iterator;
import java.util.Map;

import nuggets.IAssembler;
import nuggets.ICruncher;
import nuggets.IDelayedOperation;
import nuggets.InstanceNotAvailableException;
import nuggets.PersistenceException;


/** DMap 
 * @author walczak
 * @since  Dec 5, 2005
 */
public class DMap extends ADelegate
{
	
	/** 
	 * @param o
	 * @param mill
	 * @see nuggets.delegate.ADelegate#persist(java.lang.Object, nuggets.ICruncher)
	 */
	public void persist(Object o, ICruncher mill, ClassLoader classloader)
	{
		Map map=(Map)o;
		declareReferences(map, mill, classloader);
		  mill.startConcept(o);
		addReferences(map, mill);
	}


	/** 
	 * @param map
	 * @param mill
	 */
	protected void addReferences(Map map, ICruncher mill)
	{
		final Iterator it = map.keySet().iterator();
		while(it.hasNext())
		{
			Object key = it.next();
			mill.add(key);
			Object value=map.get(key);
			mill.add(value);
		}
	}


	/** 
	 * @param map
	 * @param mill
	 */
	protected void declareReferences(Map map, ICruncher mill, ClassLoader classloader)
	{
		final Iterator it = map.keySet().iterator();
		while(it.hasNext())
		{
			Object key = it.next();
			mill.declare(key, classloader);
			Object value=map.get(key);
			mill.declare(value, classloader);
		}
	}


	/** 
	 * @param obj
	 * @param asm
	 * @throws Exception
	 * @see nuggets.delegate.ADelegate#assemble(java.lang.Object, nuggets.IAssembler)
	 */
	public void assemble(Object obj, IAssembler asm) throws Exception
	{
		Map c = (Map)obj;
		String key;
		String value;
		while((key = asm.nextToken()) != null)
		{
			value = asm.nextToken();
			if(value == null) throw new PersistenceException("No value for a key found");
			try {
				c.put(asm.getValue(key), asm.getValue(value));
			} catch(InstanceNotAvailableException inae) {
				asm.delay(new MapDelayedAdd(c, key, value));
			}
		}
	}

	/** ArrayDelayedSet 
	 * @author walczak
	 * @since  Jan 19, 2006
	 */
	public static final class MapDelayedAdd implements IDelayedOperation
	{
		private final String	key;

		private final Map	col;

		private final String	value;

		/** 
		 * Constructor for ArrayDelayedSet.
		 * @param col
		 * @param key
		 * @param value 
		 */
		public MapDelayedAdd(Map col, String key, String value)
		{
			this.col = col;
			this.key = key;
			this.value = value;
		}

		/** 
		 * @param asm
		 * @throws Exception
		 * @see nuggets.IDelayedOperation#perform(nuggets.IAssembler)
		 */
		public void perform(IAssembler asm) throws Exception
		{
			col.put(asm.getValue(key), asm.getValue(value));
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy