package com.idega.event;
/**
* Title: idegaclasses
* Description:
* Copyright: Copyright (c) 2001
* Company: idega
* @author
* @version 1.0
*/
import com.idega.presentation.PresentationObject;
import com.idega.presentation.IWContext;
import com.idega.presentation.Page;
import java.util.Map;
import java.util.HashMap;
public class ObjectInstanceCacher
{
private static Map _objectInstanceCache = new HashMap();
private static Map _objectInstanceCacheForPage = new HashMap();
private ObjectInstanceCacher()
{
}
public static PresentationObject getObjectInstanceCached(String key)
{
return (PresentationObject) getObjectInstanceCacheMap().get(key);
}
public static PresentationObject getObjectInstanceClone(String key, IWContext iwc)
{
PresentationObject obj = getObjectInstanceCached(key);
if (obj != null)
{
return (PresentationObject) obj.clonePermissionChecked(iwc);
}
else
{
return null;
}
}
public static Map getObjectInstancesCachedForPage(String pageKey)
{
Map map = getObjectInstanceCacheMapForPage();
if (map != null)
{
return (Map) map.get(pageKey);
}
else
{
return null;
}
}
public static Map getObjectInstancesCachedForPage(int pageKey)
{
return getObjectInstancesCachedForPage(Integer.toString(pageKey));
}
public static PresentationObject getObjectInstanceCached(int key)
{
return getObjectInstanceCached(Integer.toString(key));
}
public static PresentationObject getObjectInstanceClone(int key, IWContext iwc)
{
return getObjectInstanceClone(Integer.toString(key), iwc);
}
public static void changeObjectInstanceID(
Page page,
String oldInstanceKey,
String newInstanceKey,
PresentationObject newObjectInstance)
{
// System.out.println("ObjectInstanceCasher.changeObjectInstanceID(....)");
if (newInstanceKey != null)
{
putObjectIntanceInCache(newInstanceKey, newObjectInstance);
}
//System.err.println("Cashing objectInstance: "+instanceKey);
String templateKey = page.getTemplateId();
copyInstancesFromPageToPage(templateKey, Integer.toString(page.getPageID()));
//System.err.println("Cashing objectInstance: "+instanceKey+" on page "+ ibxml.getKey()+" extending: "+ibxml.getTemplateId());
if (oldInstanceKey != null)
{
getObjectInstancesCachedForPage(page.getPageID()).remove(oldInstanceKey);
}
if (newInstanceKey != null)
{
getObjectInstancesCachedForPage(page.getPageID()).put(newInstanceKey, newObjectInstance);
}
//Map tmp = getObjectInstancesCachedForPage(page.getPageID());
/*
System.out.println("pageID = "+page.getPageID());
System.out.println("oldInstanceKey: "+ oldInstanceKey);
System.out.println("newInstanceKey: "+ newInstanceKey);
System.out.println("temp.contains(oldInstanceKey): "+ tmp.containsKey(oldInstanceKey) );
System.out.println("temp.contains(newInstanceKey): "+ tmp.containsKey(newInstanceKey));
*/
}
/**
* Copies the cacheMap from page with key oldPageKey to page with
* newPageKey if it hasen't already been done.
* @param oldPageKey
* @param newPageKey
*/
public static void copyInstancesFromPageToPage(String oldPageKey, String newPageKey)
{
Map map = getObjectInstancesCachedForPage(newPageKey);
if (map == null)
{
Map templateMap = getObjectInstancesCachedForPage(oldPageKey);
if (templateMap != null)
{
//System.err.println("geting template Map");
map = (Map) ((HashMap) templateMap).clone();
}
else
{
//System.err.println("creating new Map");
map = new HashMap();
}
getObjectInstanceCacheMapForPage().put(newPageKey, map);
}
}
public static void putObjectIntanceInCache(String instanceKey, PresentationObject objectInstance)
{
getObjectInstanceCacheMap().put(instanceKey, objectInstance);
}
private static Map getObjectInstanceCacheMap()
{
return _objectInstanceCache;
}
private static Map getObjectInstanceCacheMapForPage()
{
return _objectInstanceCacheForPage;
}
}