/*
* Copyright (c) 2003, Mishkin Berteig and Christian Gruber
*
* $Id: SparseNSpace.java 260 2005-05-15 13:08:53Z cgruber $
*/
package net.israfil.foundation.collections.nspace;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
/**
* An implementation of NSpace that is sparsely populated.
*
* @author Mishkin Berteig
* @author Christian Gruber
* @version $Revision: 260 $
*/
public class SparseNSpace implements NSpace {
private final Set dimensions = new HashSet();
public SparseNSpace() {
super();
}
public SparseNSpace(Set initialDimensions) {
this();
for (Dimension d : dimensions) {
// This is temporary, until we have an internal protected mutator.
dimensions.add(d);
}
}
/**
* @see org.frugenplat.framework.nspace.NSpace#createDimension(java.lang.String, java.lang.String)
*/
@Override
public Dimension createDimension(String name, String initialSlot)
throws DimensionExistsException {
Dimension d = new SimpleDimension(name,initialSlot);
dimensions.add(d);
return d;
}
/**
* @see org.frugenplat.framework.nspace.NSpace#deleteDimension(org.frugenplat.framework.nspace.Dimension)
*/
@Override
public void deleteDimension(Dimension dimension) {
throw new UnsupportedOperationException("Not yet implemented.");
}
/**
* @see org.frugenplat.framework.nspace.NSpace#dimensionAddedPosition(org.frugenplat.framework.nspace.Dimension, java.lang.String)
*/
@Override
public void dimensionAddedPosition(Dimension dimension, String position) {
throw new UnsupportedOperationException("Not yet implemented.");
}
/**
* @see org.frugenplat.framework.nspace.NSpace#dimensionRemovedPosition(org.frugenplat.framework.nspace.Dimension, java.lang.String)
*/
@Override
public void dimensionRemovedPosition(
Dimension dimension,
String position) {
throw new UnsupportedOperationException("Not yet implemented.");
}
/**
* @see org.frugenplat.framework.nspace.NSpace#getDimension(java.lang.String)
*/
@Override
public Dimension getDimension(String name) {
throw new UnsupportedOperationException("Not yet implemented.");
}
/**
* Returns an immutable set of dimensions for inspection..
* @see org.frugenplat.framework.nspace.NSpace#getDimensions()
*/
@Override
public Set getDimensions() {
return Collections.unmodifiableSet(dimensions);
}
/**
* Exposes the internal dimensions set to any children
* @return Set
*/
protected Set getInternalDimensions() {
return dimensions;
}
/**
* @see org.frugenplat.framework.nspace.NSpace#getValue()
*/
@Override
public Object getValue(Coordinate c) {
// SparseNSpace s = _slice(c);
throw new UnsupportedOperationException("Not yet implemented.");
}
Object _findValue() {
throw new UnsupportedOperationException("Not yet implemented.");
}
/**
* @see org.frugenplat.framework.nspace.NSpace#isPoint()
*/
@Override
public boolean isPoint() {
if (dimensions.size() == 0) return true;
else {
boolean hasThinDimensions = true;
for(Dimension d : dimensions){
hasThinDimensions = hasThinDimensions &&
(d.size() == 1);
}
return hasThinDimensions;
}
}
/**
* @see org.frugenplat.framework.nspace.NSpace#lookup(org.frugenplat.framework.nspace.Coordinate)
*/
@Override
public NSpace lookup(Coordinate c) {
return _lookup(c);
}
/**
* @see org.frugenplat.framework.nspace.NSpace#setValue(org.frugenplat.framework.nspace.Coordinate, org.frugenplat.framework.nspace.NSpace)
*/
@Override
public NSpace setValue(Coordinate c, NSpace value)
throws InvalidDimensionalityException {
throw new UnsupportedOperationException("Not yet implemented.");
}
/**
* @see org.frugenplat.framework.nspace.NSpace#setValue(org.frugenplat.framework.nspace.Coordinate, java.lang.Object)
*/
@Override
public NSpace setValue(Coordinate c, Object value)
throws InvalidDimensionalityException {
throw new UnsupportedOperationException("Not yet implemented.");
}
/**
* @see org.frugenplat.framework.nspace.NSpace#slice(org.frugenplat.framework.nspace.Coordinate)
*/
@Override
public NSpace slice(Coordinate c) {
return _slice(c);
}
private SparseNSpace _lookup(Coordinate c) {
if (c.equals(Coordinate.EMPTY)) return this;
throw new UnsupportedOperationException("Not yet implemented.");
}
private SparseNSpace _slice(Coordinate c) {
if (c.equals(Coordinate.EMPTY)) return this;
throw new UnsupportedOperationException("Not yet implemented.");
}
/* (non-Javadoc)
* @see org.frugenplat.framework.nspace.NSpace#slice(org.frugenplat.framework.nspace.Dimension)
*/
@Override
public NSpace[] slice(Dimension d) {
// TODO Auto-generated method stub
return null;
}
}