creating and selecting via LINQ works now
This commit is contained in:
parent
d69e83c974
commit
8e1a5a7438
@ -243,4 +243,28 @@ public class OmsDatabase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Dictionary<InstanceHandle, OmsClass> _classesByHandle = new Dictionary<InstanceHandle, OmsClass>();
|
||||||
|
private Dictionary<OmsClass, InstanceHandle> _handlesByClass = new Dictionary<OmsClass, InstanceHandle>();
|
||||||
|
|
||||||
|
public OmsClass GetClass(InstanceHandle handle)
|
||||||
|
{
|
||||||
|
if (_classesByHandle.ContainsKey(handle))
|
||||||
|
{
|
||||||
|
return _classesByHandle[handle];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void CreateClass(OmsClass item, Guid localClassGuid, Guid localInstanceGuid)
|
||||||
|
{
|
||||||
|
InstanceHandle ih = Oms.CreateInstanceOf(Oms.GetInstance(localClassGuid), localInstanceGuid);
|
||||||
|
RegisterClass(item, ih);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RegisterClass(OmsClass item, InstanceHandle ih)
|
||||||
|
{
|
||||||
|
_classesByHandle[ih] = item;
|
||||||
|
_handlesByClass[item] = ih;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -19,15 +19,58 @@ public class OmsInstanceList<T> : OmsInstanceList, IList<T> where T : OmsClass
|
|||||||
private OmsDatabase omsdb;
|
private OmsDatabase omsdb;
|
||||||
private Guid classGuid;
|
private Guid classGuid;
|
||||||
|
|
||||||
|
public class Enumerator : IEnumerator<T>
|
||||||
|
{
|
||||||
|
protected T GetCurrent()
|
||||||
|
{
|
||||||
|
InstanceHandle _Current = _listEnumerator.Current;
|
||||||
|
if (_Current == InstanceHandle.Empty)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return (T) omsdb.GetClass(_Current);
|
||||||
|
}
|
||||||
|
|
||||||
|
public T Current => GetCurrent();
|
||||||
|
|
||||||
|
object IEnumerator.Current => GetCurrent();
|
||||||
|
|
||||||
|
private IEnumerable<InstanceHandle> _list;
|
||||||
|
private IEnumerator<InstanceHandle> _listEnumerator;
|
||||||
|
|
||||||
|
private OmsDatabase omsdb;
|
||||||
|
public Enumerator(OmsDatabase omsdb, IEnumerable<InstanceHandle> list)
|
||||||
|
{
|
||||||
|
this.omsdb = omsdb;
|
||||||
|
_list = list;
|
||||||
|
_listEnumerator = _list.GetEnumerator();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
_listEnumerator.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool MoveNext()
|
||||||
|
{
|
||||||
|
return _listEnumerator.MoveNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Reset()
|
||||||
|
{
|
||||||
|
_listEnumerator.Reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public OmsInstanceList(OmsDatabase omsdb, Guid classGuid)
|
public OmsInstanceList(OmsDatabase omsdb, Guid classGuid)
|
||||||
{
|
{
|
||||||
this.omsdb = omsdb;
|
this.omsdb = omsdb;
|
||||||
this.classGuid = classGuid;
|
this.classGuid = classGuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public T this[int index] { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
|
public T this[int index] { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
|
||||||
|
|
||||||
public int Count
|
public int Count
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@ -36,61 +79,62 @@ public class OmsInstanceList<T> : OmsInstanceList, IList<T> where T : OmsClass
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsReadOnly => throw new NotImplementedException();
|
public bool IsReadOnly => throw new NotImplementedException();
|
||||||
|
|
||||||
public void Add(T item)
|
public void Add(T item)
|
||||||
{
|
{
|
||||||
if (item.GlobalIdentifier == Guid.Empty)
|
if (item.GlobalIdentifier == Guid.Empty)
|
||||||
{
|
{
|
||||||
Guid localClassGuid = OmsDatabase.GetGlobalIdentifierForClass(item.GetType());
|
Guid localClassGuid = OmsDatabase.GetGlobalIdentifierForClass(item.GetType());
|
||||||
Guid localInstanceGuid = Guid.NewGuid();
|
Guid localInstanceGuid = Guid.NewGuid();
|
||||||
|
|
||||||
omsdb.Oms.CreateInstanceOf(omsdb.Oms.GetInstance(localClassGuid), localInstanceGuid);
|
omsdb.CreateClass(item, localClassGuid, localInstanceGuid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Clear()
|
public void Clear()
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Contains(T item)
|
public bool Contains(T item)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CopyTo(T[] array, int arrayIndex)
|
public void CopyTo(T[] array, int arrayIndex)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerator<T> GetEnumerator()
|
public IEnumerator<T> GetEnumerator()
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
IReadOnlyCollection<InstanceHandle> ihs = omsdb.Oms.GetInstancesOf(omsdb.Oms.GetInstance(classGuid));
|
||||||
}
|
return new Enumerator(omsdb, ihs);
|
||||||
|
}
|
||||||
|
|
||||||
public int IndexOf(T item)
|
public int IndexOf(T item)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Insert(int index, T item)
|
public void Insert(int index, T item)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Remove(T item)
|
public bool Remove(T item)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveAt(int index)
|
public void RemoveAt(int index)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
IEnumerator IEnumerable.GetEnumerator()
|
IEnumerator IEnumerable.GetEnumerator()
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -628,4 +628,10 @@ public abstract class Oms
|
|||||||
//!FIXME: remove when we have sibling relationships
|
//!FIXME: remove when we have sibling relationships
|
||||||
AssignRelationship(inheritsFrom, GetInstance(KnownRelationshipGuids.Class__has_sub__Class), classInstance);
|
AssignRelationship(inheritsFrom, GetInstance(KnownRelationshipGuids.Class__has_sub__Class), classInstance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IReadOnlyCollection<InstanceHandle> GetInstancesOf(InstanceHandle classInstance)
|
||||||
|
{
|
||||||
|
IReadOnlyCollection<InstanceHandle> insts = GetRelatedInstances(classInstance, GetInstance(KnownRelationshipGuids.Class__has__Instance));
|
||||||
|
return insts;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -85,12 +85,24 @@ public class VehicleForHireTests : OmsModelingTestsBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void RelationshipsCreated() {
|
public void RelationshipsCreated()
|
||||||
|
{
|
||||||
CheckRelationshipExists(new Guid("{867126b9-294e-454f-b9c5-88df44353014}"), new Guid("{4b6f186c-babe-4c42-840b-3840373f68c2}"), "has", new Guid("{38a492b9-901f-4074-af45-642e812b51f5}"));
|
CheckRelationshipExists(new Guid("{867126b9-294e-454f-b9c5-88df44353014}"), new Guid("{4b6f186c-babe-4c42-840b-3840373f68c2}"), "has", new Guid("{38a492b9-901f-4074-af45-642e812b51f5}"));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void CreateBusinessAndTestLinq()
|
||||||
|
{
|
||||||
VehicleForHireDB db = (VehicleForHireDB) GetDatabase();
|
VehicleForHireDB db = (VehicleForHireDB) GetDatabase();
|
||||||
|
|
||||||
VehicleForHireDB.Business busn = new VehicleForHireDB.Business("Ryde Rentals Transportation");
|
VehicleForHireDB.Business busn = new VehicleForHireDB.Business("Ryde Rentals Transportation");
|
||||||
db.Businesses.Add(busn);
|
db.Businesses.Add(busn);
|
||||||
|
|
||||||
|
var query2 = from b in db.Businesses where b.Name == "test" select b;
|
||||||
|
Assert.That(query2.Count(), Is.EqualTo(0));
|
||||||
|
|
||||||
|
var query3 = from b in db.Businesses where b.Name == "Ryde Rentals Transportation" select b;
|
||||||
|
var busn3 = query3.First();
|
||||||
|
Assert.That(busn3.GlobalIdentifier, Is.EqualTo(busn.GlobalIdentifier));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user