sharp-wawi/models/PartAssembly.cs

90 lines
2.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using mapper.attributes;
namespace sharpwawi.models
{
[MappingConstraintAttribute(FieldMappingConstraint = MappingConstraints.DONTMAP,PropertyMappingConstraint = MappingConstraints.ANNOTATEDONLY)]
public class PartAssembly
{
[Mapped]
[PrimaryKey]
public Part Part;
[Mapped]
[PrimaryKey]
public int Revision;
IList<AssemblyComponent> components = new List<AssemblyComponent>();
protected PartAssembly()
{
}
internal PartAssembly(Part part)
{
Part = part;
Revision = part.HighestAssemblyRevision + 1;
}
public int Count => components.Count;
public AssemblyComponent this[int n] => components[n];
public AssemblyComponent this[Part component]{
get {
foreach (AssemblyComponent assemblyComponent in components)
{
if (assemblyComponent.Component.Equals(component))
return assemblyComponent;
}
throw new IndexOutOfRangeException();
}
}
public bool ContainsComponent(Part component){
foreach (AssemblyComponent assemblyComponent in components){
if (assemblyComponent.Component.Equals(component))
return true;
}
return false;
}
public PartAssembly Clone(){
PartAssembly clone = Part.CreateAssembly();
foreach (AssemblyComponent assemblyComponent in components)
clone.AddComponent(assemblyComponent.Component, assemblyComponent.Quantity);
return clone;
}
/**
* Add a qunatity of a component to the Assembly.
* Returns true if the component is new to the assembly, false if just the quantity changed
*
**/
public bool AddComponent(Part component, double quantity)
{
if (ContainsComponent(component))
{
this[component].Quantity += quantity;
return false;
} else {
components.Add(new AssemblyComponent(this, component, quantity));
return true;
}
}
public void RemoveComponent(AssemblyComponent component)
{
components.Remove(component);
}
public void RemoveComponent(Part component){
RemoveComponent(this[component]);
}
}
}