Skip to content

Commit

Permalink
Lots of clean-up. Added support for synchronizing workitem ordinal to…
Browse files Browse the repository at this point in the history
… get correct order
  • Loading branch information
jorn-ola-birkeland committed Nov 11, 2009
1 parent 7ede38d commit 6f95fb5
Show file tree
Hide file tree
Showing 37 changed files with 1,314 additions and 1,099 deletions.
1 change: 1 addition & 0 deletions Example/simple.css
Expand Up @@ -135,6 +135,7 @@ h1
border-left:solid 1px black;
}


.tasks h1
{
left:0px;
Expand Down
51 changes: 0 additions & 51 deletions WhiskWork.Core/AdvancedWorkflowRepository.cs

This file was deleted.

15 changes: 15 additions & 0 deletions WhiskWork.Core/IWorkflow.cs
@@ -0,0 +1,15 @@
using System.Collections.Specialized;

namespace WhiskWork.Core
{
public interface IWorkflow
{
bool ExistsWorkItem(string workItemId);
bool ExistsWorkStep(string path);
void UpdateWorkItem(WorkItem workItem);
void CreateWorkStep(WorkStep workStep);
void CreateWorkItem(WorkItem workItem);
WorkItem GetWorkItem(string workItemId);
void DeleteWorkItem(string workItemId);
}
}
4 changes: 2 additions & 2 deletions WhiskWork.Core/Synchronization/CachingSynchronizationAgent.cs
Expand Up @@ -48,9 +48,9 @@ public void UpdateStatus(SynchronizationEntry entry)
_getAllCache[index] = entry;
}

public void UpdateProperties(SynchronizationEntry entry)
public void UpdateData(SynchronizationEntry entry)
{
_innerAgent.UpdateProperties(entry);
_innerAgent.UpdateData(entry);
var index = IndexOf(entry.Id);
_getAllCache[index] = entry;
}
Expand Down
3 changes: 2 additions & 1 deletion WhiskWork.Core/Synchronization/CreationSynchronizer.cs
Expand Up @@ -53,7 +53,8 @@ private bool TryGetSlaveEntry(SynchronizationEntry masterEntry, out Synchronizat

var slaveStatus = _map.GetMappedValue(_master, masterEntry.Status);

slaveEntry = new SynchronizationEntry(masterEntry.Id, slaveStatus, masterEntry.Properties);
slaveEntry = new SynchronizationEntry(masterEntry.Id, slaveStatus, masterEntry.Properties)
{Ordinal = masterEntry.Ordinal};

return true;
}
Expand Down
37 changes: 37 additions & 0 deletions WhiskWork.Core/Synchronization/DataSynchronizer.cs
@@ -0,0 +1,37 @@
using System.Linq;

namespace WhiskWork.Core.Synchronization
{
public class DataSynchronizer
{
private readonly ISynchronizationAgent _master;
private readonly ISynchronizationAgent _slave;

public DataSynchronizer(ISynchronizationAgent master, ISynchronizationAgent slave)
{
_master = master;
_slave = slave;
}

public void Synchronize()
{
var masterEntries = _master.GetAll().ToDictionary(e => e.Id);
var slaveEntries = _slave.GetAll().ToDictionary(e => e.Id);

foreach (var masterId in masterEntries.Keys)
{
if (slaveEntries.ContainsKey(masterId))
{
var slaveEntry = slaveEntries[masterId];

var updateEntry = new SynchronizationEntry(masterId, slaveEntry.Status,
masterEntries[masterId].Properties)
{Ordinal = masterEntries[masterId].Ordinal};

_slave.UpdateData(updateEntry);
}
}

}
}
}
2 changes: 1 addition & 1 deletion WhiskWork.Core/Synchronization/ISynchronizationAgent.cs
Expand Up @@ -9,6 +9,6 @@ public interface ISynchronizationAgent
void Create(SynchronizationEntry entry);
void Delete(SynchronizationEntry entry);
void UpdateStatus(SynchronizationEntry entry);
void UpdateProperties(SynchronizationEntry entry);
void UpdateData(SynchronizationEntry entry);
}
}
41 changes: 4 additions & 37 deletions WhiskWork.Core/Synchronization/StatusSynchronizer.cs
Expand Up @@ -26,15 +26,15 @@ public void Synchronize()
if(slaveEntries.ContainsKey(masterId))
{
SynchronizationEntry masterMappedSlaveEntry;
if(!TryToMasterEntry(slaveEntries[masterId],out masterMappedSlaveEntry))
if(!TryGetMasterEntry(slaveEntries[masterId],out masterMappedSlaveEntry))
{
continue;
}

if (masterMappedSlaveEntry.Status != masterEntries[masterId].Status)
{
SynchronizationEntry slaveEntry;
if (TryToSlaveEntry(masterEntries[masterId], out slaveEntry))
if (TryGetSlaveEntry(masterEntries[masterId], out slaveEntry))
{
_slave.UpdateStatus(slaveEntry);
}
Expand All @@ -43,7 +43,7 @@ public void Synchronize()
}
}

private bool TryToSlaveEntry(SynchronizationEntry masterEntry, out SynchronizationEntry slaveEntry)
private bool TryGetSlaveEntry(SynchronizationEntry masterEntry, out SynchronizationEntry slaveEntry)
{
if (!_map.ContainsKey(_master, masterEntry.Status))
{
Expand All @@ -58,7 +58,7 @@ private bool TryToSlaveEntry(SynchronizationEntry masterEntry, out Synchronizati
return true;
}

private bool TryToMasterEntry(SynchronizationEntry slaveEntry, out SynchronizationEntry masterEntry)
private bool TryGetMasterEntry(SynchronizationEntry slaveEntry, out SynchronizationEntry masterEntry)
{
if(!_map.ContainsKey(_slave, slaveEntry.Status))
{
Expand All @@ -73,37 +73,4 @@ private bool TryToMasterEntry(SynchronizationEntry slaveEntry, out Synchronizati
}

}

public class PropertySynchronizer
{
private readonly ISynchronizationAgent _master;
private readonly ISynchronizationAgent _slave;

public PropertySynchronizer(ISynchronizationAgent master, ISynchronizationAgent slave)
{
_master = master;
_slave = slave;
}

public void Synchronize()
{
var masterEntries = _master.GetAll().ToDictionary(e => e.Id);
var slaveEntries = _slave.GetAll().ToDictionary(e => e.Id);

foreach (var masterId in masterEntries.Keys)
{
if (slaveEntries.ContainsKey(masterId))
{
var slaveEntry = slaveEntries[masterId];

var updateEntry = new SynchronizationEntry(masterId, slaveEntry.Status,
masterEntries[masterId].Properties);

_slave.UpdateProperties(updateEntry);
}
}

}
}

}
10 changes: 9 additions & 1 deletion WhiskWork.Core/Synchronization/SynchronizationEntry.cs
Expand Up @@ -28,6 +28,11 @@ public string Status
get { return _status; }
}

public int? Ordinal
{
get; set;
}

public Dictionary<string, string> Properties
{
get { return new Dictionary<string, string>(_properties); }
Expand All @@ -47,6 +52,7 @@ public override bool Equals(object obj)
result &= _id == entry._id;
result &= _status == entry._status;
result &= _properties.SequenceEqual(entry._properties);
result &= Ordinal == entry.Ordinal;

return result;
}
Expand All @@ -56,6 +62,7 @@ public override int GetHashCode()
var hc = _id != null ? _id.GetHashCode() : 1;
hc ^= _status != null ? _status.GetHashCode() : 2;
hc ^= _properties.Count > 0 ? _properties.Select(kv => kv.Key.GetHashCode() ^ kv.Value.GetHashCode()).Aggregate((hash, next) => hash ^ next) : 4;
hc ^= Ordinal.HasValue ? Ordinal.Value.GetHashCode() : 8;

return hc;
}
Expand All @@ -65,7 +72,8 @@ public override string ToString()
var sb = new StringBuilder();
sb.AppendFormat("Id={0},", _id);
sb.AppendFormat("Status={0},", _status);
sb.AppendFormat("Properties={0}", _properties.Count() > 0 ? _properties.Select(kv => kv.Key + ":" + kv.Value).Aggregate((current, next) => current + "&" + next) : string.Empty);
sb.AppendFormat("Properties={0},", _properties.Count() > 0 ? _properties.Select(kv => kv.Key + ":" + kv.Value).Aggregate((current, next) => current + "&" + next) : string.Empty);
sb.AppendFormat("Ordinal={0}", Ordinal.HasValue ? Ordinal.Value.ToString() : "<undefined>");

return sb.ToString();
}
Expand Down
11 changes: 8 additions & 3 deletions WhiskWork.Core/WhiskWork.Core.csproj
Expand Up @@ -45,8 +45,13 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AdvancedWorkflowRepository.cs" />
<Compile Include="WorkItemCreator.cs" />
<Compile Include="WorkItemMover.cs" />
<Compile Include="WorkItemRemover.cs" />
<Compile Include="WorkItemRepositoryExtension.cs" />
<Compile Include="WorkStepRepositoryExtensions.cs" />
<Compile Include="FileWorkItemLogger.cs" />
<Compile Include="IWorkflow.cs" />
<Compile Include="IWorkStepRepository.cs" />
<Compile Include="IWorkItemLogger.cs" />
<Compile Include="IWorkItemRepository.cs" />
Expand All @@ -58,16 +63,16 @@
<Compile Include="Synchronization\CachingSynchronizationAgent.cs" />
<Compile Include="Synchronization\CreationSynchronizer.cs" />
<Compile Include="Synchronization\ISynchronizationAgent.cs" />
<Compile Include="Synchronization\DataSynchronizer.cs" />
<Compile Include="Synchronization\StatusSynchronizer.cs" />
<Compile Include="Synchronization\SynchronizationEntry.cs" />
<Compile Include="Synchronization\StatusSynchronizationMap.cs" />
<Compile Include="WorkItem.cs" />
<Compile Include="WorkItemClass.cs" />
<Compile Include="WorkItemQuery.cs" />
<Compile Include="WorkItemStatus.cs" />
<Compile Include="Workflow.cs" />
<Compile Include="WorkItemTransition.cs" />
<Compile Include="WorkStep.cs" />
<Compile Include="WorkStepQuery.cs" />
<Compile Include="WorkStepType.cs" />
</ItemGroup>
<ItemGroup>
Expand Down

0 comments on commit 6f95fb5

Please sign in to comment.