/*
* $Id: Synapse.java,v 1.3 2002/09/16 08:05:02 jkl Exp $
*
* Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
*
* Use is subject to license terms, as defined in
* Anvil Sofware License, Version 1.1. See LICENSE
* file, or http://njet.org/license-1.1.txt
*/
package anvil.brain;
import java.util.Iterator;
import java.util.Enumeration;
import java.util.ArrayList;
import java.util.HashSet;
import anvil.script.Namespace;
import anvil.java.util.BindingEnumeration;
import anvil.core.Any;
import anvil.server.OperationFailedException;
/**
* class Synapse
*
* @author: Jani Lehtim�ki
*/
public class Synapse
{
protected HashSet _referers = new HashSet();
protected ArrayList _dimension = new ArrayList();
protected Brain _brain;
protected long _id;
protected String _name;
protected String _type;
protected SynapseImpl _synapse;
protected boolean _deleted = false;
public Synapse(Brain brain, long id, String type, String name)
{
_brain = brain;
_id = id;
_name = name;
_type = type;
}
public Synapse(SynapseImpl synapse)
{
_brain = synapse.getBrain();
_synapse = synapse;
synapse.setFacade(this);
_id = synapse.getId();
_name = synapse.getName();
_type = synapse.getType();
}
public String toString()
{
return "Synapse("+_id+","+_name+","+_type+")";
}
protected synchronized SynapseImpl load() throws OperationFailedException
{
if (_deleted) {
throw new SynapseDeletedException();
}
if (_synapse == null) {
try {
_synapse = _brain.load(_id);
_synapse.setFacade(this);
} catch (java.sql.SQLException e) {
throw new OperationFailedException(e);
}
}
return _synapse;
}
synchronized void addReferer(Dimension dim)
{
_referers.add(dim);
}
synchronized void removeReferer(Dimension dim)
{
_referers.remove(dim);
}
public synchronized boolean isChanged()
{
SynapseImpl synapse = _synapse;
if (synapse == null) {
return false;
} else {
return synapse.isChanged();
}
}
public Brain getBrain()
{
return _brain;
}
public long getId()
{
return _id;
}
public synchronized String getType()
{
SynapseImpl synapse = _synapse;
if (synapse == null) {
return _type;
} else {
return synapse.getType();
}
}
public synchronized String getName()
{
SynapseImpl synapse = _synapse;
if (synapse == null) {
return _name;
} else {
return synapse.getName();
}
}
public void setType(String type) throws OperationFailedException
{
load().setType(type);
}
public void setName(String name) throws OperationFailedException
{
load().setName(name);
}
public BindingEnumeration getVariables() throws OperationFailedException
{
return load().getVariables();
}
public Any getVariable(String name) throws OperationFailedException
{
return load().getVariable(name);
}
public Any setVariable(String name, Any value) throws OperationFailedException
{
return load().setVariable(name, value);
}
public Any checkVariable(String name) throws OperationFailedException
{
return load().checkVariable(name);
}
public boolean deleteVariable(String name) throws OperationFailedException
{
return load().deleteVariable(name);
}
public Enumeration getDimensions() throws OperationFailedException
{
return load().getDimensions();
}
public Dimension getOrCreateDimension(String dim) throws OperationFailedException
{
return load().getOrCreateDimension(dim);
}
public Dimension getDimension(String dim) throws OperationFailedException
{
return load().getDimension(dim);
}
public Dimension createDimension(String dim) throws OperationFailedException
{
return load().createDimension(dim);
}
public Dimension removeDimension(String dim) throws OperationFailedException
{
return load().removeDimension(dim);
}
public synchronized Dimension[] getReferers()
{
int n = _referers.size();
Dimension dim[] = new Dimension[n];
Iterator iter = _referers.iterator();
for(int i=0; i<n && iter.hasNext(); i++) {
dim[i] = (Dimension)iter.next();
}
return dim;
}
public synchronized void remove() throws OperationFailedException
{
try {
SynapseImpl impl = _synapse;
if (impl != null) {
_synapse = null;
impl.remove();
}
int size = _referers.size();
Iterator iter = _referers.iterator();
while(iter.hasNext()) {
Dimension dim = (Dimension)iter.next();
dim.remove(this);
}
_referers.clear();
_deleted = true;
_brain.remove(_id);
} catch (Throwable t) {
t.printStackTrace();
anvil.Log.log().error(t);
}
}
public synchronized void commit() throws OperationFailedException
{
if (_synapse != null) {
_synapse.commit();
}
}
}
/*
*/