/*
* Copyright (C) 2004 The Concord Consortium, Inc.,
* 10 Concord Crossing, Concord, MA 01742
*
* Web Site: http://www.concord.org
* Email: info@concord.org
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* END LICENSE */
/*
* Last modification information:
* $Revision: 1.8 $
* $Date: 2007-10-05 18:03:39 $
* $Author: scytacki $
*
* Licence Information
* Copyright 2004 The Concord Consortium
*/
package org.concord.otrunk.user;
import org.concord.framework.otrunk.DefaultOTObject;
import org.concord.framework.otrunk.OTID;
import org.concord.framework.otrunk.OTResourceMap;
import org.concord.framework.otrunk.OTResourceSchema;
import org.concord.otrunk.OTObjectServiceImpl;
import org.concord.otrunk.datamodel.OTDataObject;
import org.concord.otrunk.datamodel.OTDatabase;
import org.concord.otrunk.overlay.Overlay;
import org.concord.otrunk.overlay.OverlayListener;
/**
* OTTemplateStateMap
* Class name and description
*
* Date created: Apr 22, 2005
*
* @author scott<p>
*
*/
public class OTReferenceMap extends DefaultOTObject
implements Overlay
{
private ResourceSchema resources;
public interface ResourceSchema extends OTResourceSchema
{
public OTUserObject getUser();
public void setUser(OTUserObject user);
public OTResourceMap getMap();
public String getWorkgroupId();
public void setWorkgroupId(String id);
public String getWorkgroupToken();
public void setWorkgroupToken(String token);
}
private OTDatabase stateDb;
public OTReferenceMap(ResourceSchema resources)
{
super(resources);
this.resources = resources;
OTObjectServiceImpl objServiceImpl =
(OTObjectServiceImpl)resources.getOTObjectService();
stateDb = objServiceImpl.getCreationDb();
}
public void setUser(OTUserObject user)
{
resources.setUser(user);
}
public OTUserObject getUser()
{
return resources.getUser();
}
public String getWorkgroupId()
{
return resources.getWorkgroupId();
}
public String getWorkgroupToken()
{
return resources.getWorkgroupToken();
}
public void setWorkgroupId(String id)
{
resources.setWorkgroupId(id);
}
public void setWorkgroupToken(String token)
{
resources.setWorkgroupToken(token);
}
public OTDataObject getStateObject(OTDataObject template,
OTDatabase stateDb)
{
OTResourceMap stateMap = resources.getMap();
OTID userStateId = (OTID)stateMap.get(template.getGlobalId().toExternalForm());
// System.err.println("OTReferenceMap: requesting stateObject for: " +
// template.getGlobalId());
if(userStateId == null) {
return null;
}
try {
return stateDb.getOTDataObject(null, userStateId);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public OTDataObject createStateObject(OTDataObject template,
OTDatabase stateDb)
{
try {
OTDataObject stateObject = stateDb.createDataObject(template.getType());
OTResourceMap stateMap = resources.getMap();
stateMap.put(template.getGlobalId().toExternalForm(),
stateObject.getGlobalId());
return stateObject;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public boolean contains(OTID id)
{
return stateDb.contains(id);
}
public OTDataObject getDeltaObject(OTDataObject baseObject)
{
return getStateObject(baseObject, stateDb);
}
public OTDataObject createDeltaObject(OTDataObject baseObject)
{
return createStateObject(baseObject, stateDb);
}
public OTDatabase getOverlayDatabase()
{
return stateDb;
}
/**
* We don't need to do anything here because in this design there is a seperate database
* for storing all the delta and non delta objects of the overlay. This is the database
* returned by the getOverlayDatabase call. So the objects are "registered" when the are
* added or created in the stateDb.
*/
public void registerNonDeltaObject(OTDataObject childObject)
{
}
public void addOverlayListener(OverlayListener listener)
{
// This is only used for user level overlays which are on the top of the
// set of layers, so they don't need to generate overlay change events
throw new UnsupportedOperationException("reference map doesn't generate events");
}
public void removeOverlayListener(OverlayListener listener)
{
// This is only used for user level overlays which are on the top of the
// set of layers, so they don't need to generate overlay change events
throw new UnsupportedOperationException("reference map doesn't generate events");
}
public void pruneNonDeltaObjects()
{
// we don't want to support pruning objects from the user level overlays
}
}