using System;
using System.Text;
using System.Collections;
using System.Diagnostics;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using EXCommon;
using EXDb97;
//###2
namespace EPol
{
//----------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for GroupDbTable.
///
//----------------------------------------------------------------------------------------------------------------------------------------------
public class COrganisationMemberView : CDbJoinView
{
public COrganisationMemberView(string sDatabaseName)
: base(new CDbTableView(ORGANISATION_PREFIXE, new COrganisationDbTable(sDatabaseName)),
new CDbTableView(MEMBER_PREFIXE, new COrganisationMemberDbTable(sDatabaseName)))
{
vAddLinkIndex(ORGANISATION_PREFIXE, MASTER_INDEX_FIELD, MEMBER_PREFIXE, ORGANISATION_INDEX_FIELD);
vAddLinkIndex(ORGANISATION_PREFIXE, MASTER_SUB_INDEX_FIELD, MEMBER_PREFIXE, ORGANISATION_SUB_INDEX_FIELD);
}
public COrganisationDbTable GetOrganisationTable
{
get
{
return (COrganisationDbTable)((CDbTableView)this.GetMasterView).oGetTable;
}
}
public COrganisationMemberDbTable GetMemberTable
{
get
{
return (COrganisationMemberDbTable)((CDbTableView)this.GetSlaveView).oGetTable;
}
}
public ec dDelete(SIndex oOrganisationIndex)
{
ec dErrorCode = GetMemberTable.dRemoveAllMembers(oOrganisationIndex);
if (dErrorCode == ec.ST_SUCCEED)
{
dErrorCode = GetOrganisationTable.dDelete(oOrganisationIndex);
}
return dErrorCode;
}
public ec dAddOrganisation(string csName, SIndex oParentOrganisationIndex, bool bVirtualOrganisation, SIndex oCreatorProfileIndex,
P dLanguage)
{
ec dErrorCode;
if (IsUsed(oParentOrganisationIndex))
{
dErrorCode = GetOrganisationTable.dAdd(csName, dLanguage, oParentOrganisationIndex, bVirtualOrganisation);
}
else
{
dErrorCode = GetOrganisationTable.dAdd(csName, dLanguage, bVirtualOrganisation);
}
if (dErrorCode == ec.ST_SUCCEED)
{
SIndex oOrganisationIndex = GetOrganisationTable.dGetIndex(csName);
dErrorCode = GetMemberTable.dAdd(oOrganisationIndex, iGetPublicProfileIfLoginProfile(oCreatorProfileIndex), P.ADMINISTRATOR_ORGANISATION);
}
CTrace.i().vWriteLn(ENMessage.Organisation, GetOrganisationTable.csDumpTable());
CTrace.i().vWriteLn(ENMessage.Organisation, GetMemberTable.csDumpTable());
return dErrorCode;
}
/*
public ec dGetAccessableProfile(int dReaderProfileIndex, out SIndex[] oAvatarOfAuthorIndexArray)
{
vResetSelect();
bAddWhere(MEMBER_PREFIXE, PROFILE_INDEX_FIELD, dReaderProfileIndex);
bAddDisplayColumn(MEMBER_PREFIXE, PROFILE_INDEX_FIELD);
bAddDisplayColumn(MEMBER_PREFIXE, PROFILE_SUB_INDEX_FIELD);
CTrace.i().vWriteLn(ENMessage.Organisation,"m_oOrganisationMemberView dump = " + sql(sGetFieldList));
CTrace.i().vWriteLn(ENMessage.Organisation,"m_oOrganisationAvatarView dump = " + csDumpTable());
ArrayList oFieldOutputArray;
ec dRC = dGetSelect(out oFieldOutputArray);
if (oFieldOutputArray == null)
{
dRC = ec.ST_PROFILE_CAN_NOT_ACCESS_ANY_OTHER_PROFILE;
oAvatarOfAuthorIndexArray = null;
}
else
{
oAvatarOfAuthorIndexArray = new SIndex[oFieldOutputArray.Count];
if (dRC == ec.ST_SUCCEED)
{
for (int dLn = 0; dLn < oFieldOutputArray.Count; dLn++)
{
object[] oOutputArray = (object[])oFieldOutputArray[dLn];
oAvatarOfAuthorIndexArray[dLn].dIndex = Convert.ToInt32(oOutputArray[0]);
oAvatarOfAuthorIndexArray[dLn].dSubIndex = Convert.ToInt32(oOutputArray[1]);
}
}
}
CTrace.i().vWriteLn(ENMessage.Access, " dGetAccessableProfile profile by organisation(" + dReaderProfileIndex + ")=" + ToString(oAvatarOfAuthorIndexArray));
return dRC;
}
*/
}
//----------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for GroupDbTable.
///
//----------------------------------------------------------------------------------------------------------------------------------------------
///
public class COrganisationView : CCommandFactoryBase
{
public COrganisationView(P dLanguage, string sDatabaseName)
{
m_dLanguage = dLanguage;
m_oProfileView = new CProfileView(dLanguage, sDatabaseName);
m_oOrganisationMemberView = new COrganisationMemberView(sDatabaseName);
m_oMyOrganisationMemberView = new CDbJoinView(
new CDbTableView(PROFILE_PREFIXE, m_oProfileView.GetMasterTable),
m_oOrganisationMemberView);
m_oMyOrganisationMemberView.vAddLinkIndex(PROFILE_PREFIXE, MASTER_INDEX_FIELD, COrganisationMemberView.MEMBER_PREFIXE, PROFILE_INDEX_FIELD);
m_oMyOrganisationMemberView.vAddLinkIndex(PROFILE_PREFIXE, MASTER_SUB_INDEX_FIELD, COrganisationMemberView.MEMBER_PREFIXE,
PROFILE_SUB_INDEX_FIELD);
m_oOrganisationRelationDbTable = new COrganisationRelationDbTable(sDatabaseName);
// m_oAvatarAuthorAccess = NOT_USED_SINDEX;
}
P m_dLanguage;
const string PROFILE_PREFIXE = "prof";
COrganisationRelationDbTable m_oOrganisationRelationDbTable;
CProfileView m_oProfileView;
CDbJoinView m_oMyOrganisationMemberView;
COrganisationMemberView m_oOrganisationMemberView;
public void vCleanAllData()
{
m_oOrganisationMemberView.vCleanAllData();
m_oMyOrganisationMemberView.vCleanAllData();
m_oOrganisationRelationDbTable.dDropTable();
m_oProfileView.vCleanAllData();
}
public COrganisationDbTable GetOrganisationTable
{
get
{
return m_oOrganisationMemberView.GetOrganisationTable;
}
}
public CProfileView GetProfileView
{
get
{
return m_oProfileView;
}
}
public COrganisationMemberDbTable GetMemberTable
{
get
{
return m_oOrganisationMemberView.GetMemberTable;
}
}
public ec dDelete(SIndex oOrganisationIndex, SIndex oCreatorIndex)
{
ec dErrorCode = ec.ST_SUCCEED;
if (oCreatorIndex.dIndex != dGetCreatorProfileIndex(oOrganisationIndex).dIndex)
{
dErrorCode = ec.ST_ORGANISATION_DELETE_NOT_THE_ADMINISTRATOR;
}
else if (GetMemberTable.dCountRegisteredMember(oOrganisationIndex) > 0)
{
dErrorCode = ec.ST_ORGANISATION_DELETE_AT_LEAST_ONE_MEMBER_DID_NOT_REMOVE_HIS_GRANT_ACCESS;
}
else
{
dErrorCode = m_oOrganisationRelationDbTable.dRemoveAllRelationsAbout(oOrganisationIndex);
if (dErrorCode == ec.ST_SUCCEED)
{
dErrorCode = m_oOrganisationMemberView.dDelete(oOrganisationIndex);
}
}
return dErrorCode;
}
public SIndex dGetCreatorProfileIndex(SIndex oOrganisationIndex)
{
return GetMemberTable.dGetCreator(oOrganisationIndex);
}
public ec dAddOrganisation(string csName, SIndex oParentOrganisationIndex, bool bVirtualOrganisation, SIndex oCreatorProfileIndex)
{
P dLanguage = m_oProfileView.dGetLanguage(oCreatorProfileIndex);
if (dLanguage == P.LANGUAGE)
{
return ec.ST_ORGANISATION_LANGUAGE_OPTION_SHOULD_BE_SPECIFIED;
}
ec dErrorCode = m_oOrganisationMemberView.dAddOrganisation(csName, oParentOrganisationIndex, bVirtualOrganisation, oCreatorProfileIndex,
dLanguage);
return dErrorCode;
}
public SIndex dGetOrganisationIndex(string csName)
{
return GetOrganisationTable.dGetIndex(csName);
}
public ec dAddOrganisation(string csName, bool bVirtualOrganisation, SIndex oCreatorProfileIndex)
{
if (IsNotUsed(oCreatorProfileIndex))
{
return ec.ST_ORGANISATION_CREATION_AVATAR_SHOULD_BE_SPECIFIED;
}
P dLanguage = m_oProfileView.dGetLanguage(oCreatorProfileIndex);
if (dLanguage == P.LANGUAGE)
{
return ec.ST_ORGANISATION_LANGUAGE_OPTION_SHOULD_BE_SPECIFIED;
}
ec dErrorCode = m_oOrganisationMemberView.dAddOrganisation(csName, NOT_USED_SINDEX, bVirtualOrganisation, oCreatorProfileIndex,
dLanguage);
return dErrorCode;
}
public ec dAddMember(SIndex oOrganisationIndex, SIndex oCommandCallerIndex, SIndex oMemberProfileIndex)
{
ec dRC = ec.ST_SUCCEED;
if (IsNotUsed(oOrganisationIndex))
{
return ec.ST_ORGANISATION_NAME_IS_NOT_KNOWN;
}
else if (oMemberProfileIndex.dSubIndex == PRIVATE_PROFILE_SUB_INDEX)
{
dRC = ec.ST_ORGANISATION_CREATION_MEMBER_SECRET_PROFILE_CAN_NOT_BE_ADDED;
}
else
{
SIndex oCreatorIndex = dGetCreatorProfileIndex(oOrganisationIndex);
if (oCommandCallerIndex.dIndex != oCreatorIndex.dIndex)
{
dRC = ec.ST_ORGANISATION_DELETE_NOT_THE_ADMINISTRATOR;
}
else
{
P dMemberLanguage = m_oProfileView.dGetLanguage(oMemberProfileIndex);
if (dMemberLanguage == P.LANGUAGE)
{
dRC = ec.ST_ORGANISATION_LANGUAGE_LANGUAGE_ERROR;
}
else if (dMemberLanguage != GetOrganisationTable.dGetLanguage(oOrganisationIndex))
{
dRC = ec.ST_ORGANISATION_LANGUAGE_MISMATCH_WITH_MEMBER;
}
else
{
dRC = GetMemberTable.dAdd(oOrganisationIndex, oMemberProfileIndex, P.MEMBER);
}
}
}
CTrace.i().vWriteLn(ENMessage.Organisation,"dRC = " + dRC + GetMemberTable.csDumpTable());
return dRC;
}
public ec dGetListMember(SIndex oOrganisationIndex, out string sTextMessage)
{
SIndex[] oProfileIndexArray; P[] dPositionArray; bool[] bGrantAccessArray;
ec dRC = GetMemberTable.dGetMember(oOrganisationIndex, out oProfileIndexArray, out dPositionArray, out bGrantAccessArray);
sTextMessage = null;
CTrace.i().vWriteLn(ENMessage.Organisation,GetMemberTable.csDumpTable());
CTrace.i().vWriteLn(ENMessage.Organisation,m_oProfileView.GetMasterTable.csDumpTable());
if (dRC == ec.ST_SUCCEED)
{
CVariableListReport oVariableListReport = new CVariableListReport("Name", "Position", "GrantAccess");
for (int dLn = 0; dLn < oProfileIndexArray.Length; dLn++)
{
string sAvatarName = m_oProfileView.GetMasterTable.sGetName(oProfileIndexArray[dLn]);
oVariableListReport.vAdd(sAvatarName, CEntityManager.Instance(this.m_dLanguage).sGetEntityName( dPositionArray[dLn]), bGrantAccessArray[dLn].ToString());
}
sTextMessage = oVariableListReport.sText;
}
return dRC;
}
/*
public bool bReaderHasAReadAccessToAuthor(int dReaderProfileIndex, SIndex oAuthorAuthorizedToReadDocumentAvatarIndex)
{
SIndex[] oAuthorAuthorizedToReadDocumentAvatarIndexArray= new SIndex[1];
oAuthorAuthorizedToReadDocumentAvatarIndexArray[0]=oAuthorAuthorizedToReadDocumentAvatarIndex;
return bReaderHasAReadAccessToAuthor(dReaderProfileIndex, oAuthorAuthorizedToReadDocumentAvatarIndexArray);
}
* */
// public SIndex m_oAvatarAuthorAccess;
public bool bHasAPublicProfile(SIndex[] oAuthorAuthorizedToReadDocumentAvatarIndexArray)
{
if (oAuthorAuthorizedToReadDocumentAvatarIndexArray != null)
{
for (int i = 0; i < oAuthorAuthorizedToReadDocumentAvatarIndexArray.Length; i++)
{
if (oAuthorAuthorizedToReadDocumentAvatarIndexArray[i].dSubIndex == PUBLIC_PROFILE_SUB_INDEX)
{
return true;
}
}
}
return false;
}
public bool bReaderHasAReadAccessToAuthor(int dReaderProfileIndex, SIndex[] oAuthorAuthorizedToReadDocumentAvatarIndexArray,
out SIndex oAvatarAuthorAccess)
{
CTrace.i().vWriteLn(ENMessage.Access, "bReaderHasAReadAccessToAuthor oAuthorAuthorizedToReadDocumentAvatarIndexArray= " +
ToString(oAuthorAuthorizedToReadDocumentAvatarIndexArray));
oAvatarAuthorAccess = NOT_USED_SINDEX;
if (oAuthorAuthorizedToReadDocumentAvatarIndexArray== null ||
(dReaderProfileIndex == oAuthorAuthorizedToReadDocumentAvatarIndexArray[0].dIndex ) ||
IsNotUsed(oAuthorAuthorizedToReadDocumentAvatarIndexArray[0]))
{
oAvatarAuthorAccess = new SIndex(dReaderProfileIndex, PUBLIC_PROFILE_SUB_INDEX);
return true;
}
else if ( bHasAPublicProfile(oAuthorAuthorizedToReadDocumentAvatarIndexArray))
{
oAvatarAuthorAccess = new SIndex(oAuthorAuthorizedToReadDocumentAvatarIndexArray[0].dIndex, PUBLIC_PROFILE_SUB_INDEX);
return true;
}
else
{
SIndex[] oAvatarOfAuthorIndexArray;
dGetAccessableProfile(dReaderProfileIndex, oAuthorAuthorizedToReadDocumentAvatarIndexArray[0].dIndex, out oAvatarOfAuthorIndexArray);
CTrace.i().vWriteLn(ENMessage.Access, " oAvatarOfAuthorIndexArray = " + ToString(oAvatarOfAuthorIndexArray));
for (int i = 0; i < oAuthorAuthorizedToReadDocumentAvatarIndexArray.Length; i++)
{
if (dReaderProfileIndex == oAuthorAuthorizedToReadDocumentAvatarIndexArray[i].dIndex || IsNotUsed(oAuthorAuthorizedToReadDocumentAvatarIndexArray[i]))
{
oAvatarAuthorAccess = new SIndex(dReaderProfileIndex, PUBLIC_PROFILE_SUB_INDEX);
return true;
}
for (int j = 0; j < oAvatarOfAuthorIndexArray.Length; j++)
{
if ( m_oProfileView.GetMasterTable.bIsChildOf(oAvatarOfAuthorIndexArray[j], oAuthorAuthorizedToReadDocumentAvatarIndexArray[i]))
{
oAvatarAuthorAccess = oAuthorAuthorizedToReadDocumentAvatarIndexArray[i];
return true;
}
}
}
return false;
}
}
public ec dGetAccessableProfile(int dReaderProfileIndex, int dAuthorProfileIndex, out SIndex[] oAvatarOfAuthorIndexArray)
{
SIndex[] oFriendAvatarOfAuthorIndexArray, oAccessibleFromOrganisationArray;
ec dRC = m_oProfileView.dGetSelectFriendAvatarAccess(dReaderProfileIndex, dAuthorProfileIndex, out oFriendAvatarOfAuthorIndexArray);
dRC = dGetListAccessibleProfileThroughOrganisation(dReaderProfileIndex, out oAccessibleFromOrganisationArray);
oAvatarOfAuthorIndexArray = oConcat(oFriendAvatarOfAuthorIndexArray, Extract(dAuthorProfileIndex, oAccessibleFromOrganisationArray));
CTrace.i().vWriteLn(ENMessage.Access, " dGetAccessableProfile Friend and Organisation) = " + ToString(oAvatarOfAuthorIndexArray));
return dRC;
}
public ec dGetListAccessibleProfileThroughOrganisation(int dReadingProfileIndex, out SIndex[] oAccessibleAvatarArray)
{
ArrayList oFieldOutputArray;
m_oMyOrganisationMemberView.vResetSelect();
m_oMyOrganisationMemberView.bAddReflexiveWhere(MEMBER_PREFIXE, PROFILE_INDEX_FIELD, dReadingProfileIndex);
m_oMyOrganisationMemberView.bAddDisplayReflexiveColumn(PROFILE_PREFIXE, MASTER_INDEX_FIELD);
m_oMyOrganisationMemberView.bAddDisplayReflexiveColumn(PROFILE_PREFIXE, MASTER_SUB_INDEX_FIELD);
CTrace.i().vWriteLn(ENMessage.Organisation, "m_oMyOrganisationMemberView dump = " + m_oMyOrganisationMemberView.sqlReflexive(m_oMyOrganisationMemberView.sGetFieldList));
// CTrace.i().vWriteLn(ENMessage.Organisation,"m_oMyOrganisationAvatarView dump = " + m_oMyOrganisationMemberView.csDumpTable());
ec dRC = m_oMyOrganisationMemberView.dGetReflexiveSelect(out oFieldOutputArray);
oAccessibleAvatarArray = ToSIndexArray(oFieldOutputArray, 0);
CTrace.i().vWriteLn(ENMessage.Access, " dGetListAccessibleProfileThroughOrganisation Organisation) = " + oAccessibleAvatarArray);
return dRC;
}
public ec dGetListAvatarWithPrivilegeAccess(SIndex oClaimingProfileIndex, out string sTextMessage)
{
ArrayList oFieldOutputArray;
m_oMyOrganisationMemberView.vResetSelect();
m_oMyOrganisationMemberView.bAddReflexiveWhere(MEMBER_PREFIXE, PROFILE_INDEX_FIELD, oClaimingProfileIndex.dIndex);
m_oMyOrganisationMemberView.bAddDisplayReflexiveColumn(PROFILE_PREFIXE, MASTER_NAME_FIELD);
m_oMyOrganisationMemberView.bAddDisplayReflexiveColumn(ORGANISATION_PREFIXE, MASTER_NAME_FIELD);
m_oMyOrganisationMemberView.bAddDisplayColumn(PROFILE_PREFIXE, MASTER_NAME_FIELD);
CTrace.i().vWriteLn(ENMessage.Organisation,"m_oMyOrganisationMemberView dump = " + m_oMyOrganisationMemberView.sqlReflexive(m_oMyOrganisationMemberView.sGetFieldList));
// CTrace.i().vWriteLn(ENMessage.Organisation,"m_oMyOrganisationAvatarView dump = " + m_oMyOrganisationMemberView.csDumpTable());
ec dRC = m_oMyOrganisationMemberView.dGetReflexiveSelect(out oFieldOutputArray);
sTextMessage = null;
CVariableListReport oVariableListReport = new CVariableListReport("Avatar", "Organisation", "MyAvatar");
if (dRC == ec.ST_SUCCEED)
{
for (int dLn = 0; dLn < oFieldOutputArray.Count; dLn++)
{
oVariableListReport.vAddRow((object[])oFieldOutputArray[dLn]);
}
}
CTrace.i().vWriteLn(ENMessage.Organisation,m_oProfileView.GetMasterTable.csDumpTable());
CTrace.i().vWriteLn(ENMessage.Organisation,m_oProfileView.GetFriendTable.csDumpTable());
ArrayList oAvatarNameArrayList;
dRC = m_oProfileView.dGetSelectFriendAvatarAccess(oClaimingProfileIndex, out oAvatarNameArrayList);
if (dRC == ec.ST_SUCCEED)
{
for (int dLn = 0; dLn < oAvatarNameArrayList.Count; dLn++)
{
oVariableListReport.vAdd(((object[])oAvatarNameArrayList[dLn])[0], "friend", ((object[])oAvatarNameArrayList[dLn])[1] );
}
}
sTextMessage = oVariableListReport.sText;
return dRC;
}
public ec dGetListFriend(SIndex oClaimingProfileIndex, out string sTextMessage)
{
CTrace.i().vWriteLn(ENMessage.Organisation,m_oProfileView.GetMasterTable.csDumpTable());
CTrace.i().vWriteLn(ENMessage.Organisation,m_oProfileView.GetFriendTable.csDumpTable());
CVariableListReport oVariableListReport = new CVariableListReport("Friend", "MyAvatar", "Date Modified");
ArrayList oAvatarNameArrayList;
ec dRC = m_oProfileView.dGetSelectFriend(oClaimingProfileIndex, out oAvatarNameArrayList);
if (dRC == ec.ST_SUCCEED)
{
for (int dLn = 0; dLn < oAvatarNameArrayList.Count; dLn++)
{
oVariableListReport.vAddRow((object[])oAvatarNameArrayList[dLn]);
}
}
sTextMessage = oVariableListReport.sText;
return dRC;
}
public void vGetMemeContent(int dReaderProfileIndex, CMemeArray oMemeArray, out SMemeDisplay[] oContentArray)
{
oContentArray = new SMemeDisplay[oMemeArray.Length];
for (int i = 0; i < oMemeArray.Length; i++)
{
oContentArray[i].iMeme = oMemeArray[i].m_iMemeIndex;
m_oProfileView.GetIdentifierView.dConvert(oMemeArray[i].oGetAddress, true, out oContentArray[i].sAddress);
SIndex oAvatarAuthorAccess;
if (bReaderHasAReadAccessToAuthor(dReaderProfileIndex, oMemeArray[i].m_iAvatarAuthorAccessArray, out oAvatarAuthorAccess))
{
// sTextMessage += m_oProfileView.GetMasterTable.sGetName(m_oOrganisationView.m_oAvatarAuthorAccess) + " has " + sOptionAddress;
// sTextMessage += " is " + oMemeArray[i].ToString() + '\n';
oContentArray[i].sContent = oMemeArray[i].ToString();
}
else
{
oContentArray[i].sContent = null;
// sTextMessage += m_oProfileView.GetMasterTable.sGetName(m_oOrganisationView.m_oAvatarAuthorAccess) + " has " + sOptionAddress;
// sTextMessage += ": You have no access authorisation to this content\n";
}
CTrace.i().vWriteLn(ENMessage.Attribute, " (oMemeArray[i].oGetAddress= " + oMemeArray[i].oGetAddress.csDump() + " m_oOrganisationView.m_oAvatarAutorAccess
= " + oAvatarAuthorAccess);
oContentArray[i].sAuthorName = m_oProfileView.GetMasterTable.sGetName(oAvatarAuthorAccess);
}
}
}
//----------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for GroupDbTable.
///
//----------------------------------------------------------------------------------------------------------------------------------------------
///
public class COrganisationDbTable : CDbMasterTable
{
public COrganisationDbTable(string strDatabaseName)
: base(ORGANISATION_LIST_TABLE_NAME, strDatabaseName)
{
vAddColumn(LANGUAGE_FIELD, ENTITY_TYPE, false);
vAddColumn("IsVirtual", BOOLEAN_TYPE, false);
}
static string csLanguageZoneName(int dLanguage)
{
return "Zone." + dLanguage.ToString();
}
public SIndex dGetLanguageZone(int dLanguage)
{
return base.dGetIndex(csLanguageZoneName(dLanguage));
}
public P dGetLanguage(SIndex oOrganisationIndex)
{
return (P)this.GetInteger(LANGUAGE_FIELD, sqlIsIndex(oOrganisationIndex.dIndex));
}
const int LANGUAGE_ZONE_PARENT_INDEX = 0;
public ec dAddVirtual(string csName, P dLanguage)
{
return dAdd(csName, dLanguage, true);
}
public SIndex dAddFirstProfile(string sProfileID)
{
SIndex oMainIndex;
if (bHasOnlyAuthorizeCharacter(sProfileID) == false)
{
return NOT_USED_SINDEX;
}
oMainIndex = dAddProfileIndexValues(ORGANISATION_ROOT_SUB_INDEX, NOT_USED);
vAddValue(sProfileID);
return oMainIndex;
}
public ec dAdd(string csName, P dLanguage, bool bVirtualOrganisation)
{
this.dAddFirstProfile(csName);
vAddValue((int)dLanguage);
vAddValue(bVirtualOrganisation);
return base.dInsertIntoTable() == ec.ST_SUCCEED ? ec.ST_SUCCEED : ec.ST_ORGANISATION_CREATION_FAILED;
}
public ec dAdd(string csName, P dLanguage, SIndex oParentOrganisationIndex, bool bVirtualOrganisation)
{
P dParentLanguage = dGetLanguage(oParentOrganisationIndex);
if (dLanguage != dParentLanguage)
{
return ec.ST_ORGANISATION_PARENT_ORGANISATION_LANGUAGE_CAN_NOT_BE_DIFFERENT_THAN_CURRENT_ORGANISATION;
}
dAddNewSubProfile(csName, oParentOrganisationIndex);
vAddValue(dLanguage);
vAddValue(bVirtualOrganisation);
return base.dInsertIntoTable() == ec.ST_SUCCEED ? ec.ST_SUCCEED : ec.ST_ORGANISATION_CREATION_FAILED;
}
}
///----------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for GroupDbTable.
///
///----------------------------------------------------------------------------------------------------------------------------------------------
public class COrganisationRelationDbTable : CDbSTable
{
public COrganisationRelationDbTable(string strDatabaseName)
: base("OrganisationRelationTable", strDatabaseName)
{
vAddColumn(ORGANISATION_INDEX_FIELD, INTEGER_TYPE, true);
vAddColumn(ORGANISATION_SUB_INDEX_FIELD, INTEGER_TYPE, true);
vAddColumn(ORGANISATION_RELATION_FIELD, INTEGER_TYPE, true);
vAddColumn("OrganisationTargetIndex", INTEGER_TYPE, false);
vAddColumn("OrganisationTargetSubIndex", INTEGER_TYPE, false);
}
public string sqlIsIndex(SIndex oOrganisationIndex)
{
return sFieldEqual(ORGANISATION_INDEX_FIELD, oOrganisationIndex.dIndex) + AND +
sFieldEqual(ORGANISATION_SUB_INDEX_FIELD, oOrganisationIndex.dSubIndex);
}
public ec dRemoveAllRelationsAbout(SIndex oOrganisationIndex)
{
ec dRet = dDelete(sqlIsIndex(oOrganisationIndex));
if (dRet != ec.ST_SUCCEED) return ec.ST_ORGANISATION_DELETE_RELATION_PROBLEM;
dRet = dDelete(sFieldEqual("OrganisationTargetIndex", oOrganisationIndex.dIndex) + AND +
sFieldEqual("OrganisationTargetSubIndex", oOrganisationIndex.dSubIndex));
if (dRet != ec.ST_SUCCEED) return ec.ST_ORGANISATION_DELETE_RELATION_PROBLEM;
return ec.ST_SUCCEED;
}
}
///----------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for GroupDbTable.
///
///----------------------------------------------------------------------------------------------------------------------------------------------
public class COrganisationMemberDbTable : CDbSTable
{
public COrganisationMemberDbTable(string strDatabaseName)
: base("OrganisationMemberTable", strDatabaseName)
{
vAddColumn(ORGANISATION_INDEX_FIELD, INTEGER_TYPE, true);
vAddColumn(ORGANISATION_SUB_INDEX_FIELD, INTEGER_TYPE, true);
vAddColumn(PROFILE_INDEX_FIELD, INTEGER_TYPE, true);
vAddColumn(PROFILE_SUB_INDEX_FIELD, INTEGER_TYPE, false);
vAddColumn(POSITION_FIELD, INTEGER_TYPE, false);
vAddColumn(GRANT_ACCESS_FIELD, BOOLEAN_TYPE, false);
}
public ec dRemoveAllMembers(SIndex oOrganisationIndex)
{
ec dRet = dDelete(sqlIsIndex(oOrganisationIndex));
if (dRet == ec.ST_SUCCEED) return ec.ST_ORGANISATION_DELETE_MEMBER_PROBLEM;
return ec.ST_SUCCEED;
}
public const string GRANT_ACCESS_FIELD = "HasGrantAccess";
public ec dAdd(SIndex oOrganisationIndex, SIndex oProfileIndex, P dPosition)
{
EPAssert(oOrganisationIndex.dSubIndex >= 0, "Organisation subindex should be more than one");
vAddValue(oOrganisationIndex.dIndex);
vAddValue(oOrganisationIndex.dSubIndex);
vAddValue(oProfileIndex.dIndex);
vAddValue(oProfileIndex.dSubIndex);
vAddValue((int)dPosition);
vAddValue(false);
return base.dInsertIntoTable() == ec.ST_SUCCEED ? ec.ST_SUCCEED : ec.ST_ORGANISATION_CREATION_MEMBER_FAILED;
}
public SIndex dGetCreator(SIndex oOrganisationIndex)
{
SIndex[] oProfileIndexArray;
CTrace.i().vWriteLn(ENMessage.Organisation,csDumpTable());
if (dGetMember(oOrganisationIndex, P.ADMINISTRATOR_ORGANISATION, out oProfileIndexArray) != ec.ST_SUCCEED || oProfileIndexArray.Length
<= 0)
{
EPAssert(false, "Can not return any profile index");
return NOT_USED_SINDEX;
}
return oProfileIndexArray[0];
}
public string sqlIsIndex(SIndex oOrganisationIndex)
{
return sFieldEqual(ORGANISATION_INDEX_FIELD, oOrganisationIndex.dIndex) + AND +
sFieldEqual(ORGANISATION_SUB_INDEX_FIELD, oOrganisationIndex.dSubIndex);
}
public string sqlIsIndex(SIndex oOrganisationIndex, int dProfileIndex)
{
return sqlIsIndex(oOrganisationIndex) + AND + sFieldEqual(PROFILE_INDEX_FIELD, dProfileIndex);
}
public bool bGetMember(SIndex oOrganisationIndex, SIndex oProfileIndex,
out int dRegisterAvatarSubIndex, out int dPosition, out bool bIsGranted)
{
return bGetSelect(PROFILE_SUB_INDEX_FIELD, POSITION_FIELD, GRANT_ACCESS_FIELD,
sqlIsIndex(oOrganisationIndex, oProfileIndex.dIndex),
out dRegisterAvatarSubIndex, out dPosition, out bIsGranted);
}
public ec dGetMember(SIndex oOrganisationIndex, P dPositionType, out SIndex[] oProfileIndexArray)
{
ArrayList oOutputArray;
ec dRC = dGetSelect(sqlIsIndex(oOrganisationIndex) + AND + sFieldEqual(POSITION_FIELD, dPositionType), out oOutputArray,
PROFILE_INDEX_FIELD, PROFILE_SUB_INDEX_FIELD);
oProfileIndexArray = new SIndex[oOutputArray.Count];
for (int i = 0; i < oOutputArray.Count; i++)
{
oProfileIndexArray[i].dIndex = (int)((object[])oOutputArray[i])[0];
oProfileIndexArray[i].dSubIndex = (int)((object[])oOutputArray[i])[1];
}
return dRC == ec.ST_SUCCEED ? ec.ST_SUCCEED : ec.ST_ORGANISATION_MEMBER_EXTRACTION_FAILED; ;
}
public ec dGetMember(SIndex oOrganisationIndex,
out SIndex[] oProfileIndexArray, out P[] dPositionArray, out bool[] bGrantAccessArray)
{
ArrayList oOutputArray;
ec dRC = dGetSelect(sqlIsIndex(oOrganisationIndex), out oOutputArray,
PROFILE_INDEX_FIELD, PROFILE_SUB_INDEX_FIELD, POSITION_FIELD, GRANT_ACCESS_FIELD);
oProfileIndexArray = new SIndex[oOutputArray.Count];
dPositionArray = new P[oOutputArray.Count];
bGrantAccessArray = new bool[oOutputArray.Count];
for (int i = 0; i < oOutputArray.Count; i++)
{
oProfileIndexArray[i].dIndex = (int)((object[])oOutputArray[i])[0];
oProfileIndexArray[i].dSubIndex = (int)((object[])oOutputArray[i])[1];
dPositionArray[i] = (P)((object[])oOutputArray[i])[2];
bGrantAccessArray[i] = (bool)((object[])oOutputArray[i])[3];
}
return dRC == ec.ST_SUCCEED ? ec.ST_SUCCEED : ec.ST_ORGANISATION_MEMBER_EXTRACTION_FAILED;
}
public int dCountRegisteredMember(SIndex oOrganisationIndex)
{
int dCount;
dGetRecordCount(sqlIsIndex(oOrganisationIndex) + AND + sFieldEqual(GRANT_ACCESS_FIELD, true), out dCount);
return dCount;
}
public ec dSetAccess(SIndex oOrganisationIndex, SIndex oProfileIndex, bool bIsNewGranted)
{
int dProfileSubIndex, dPosition; bool bIsGranted;
bool bRet = bGetMember(oOrganisationIndex, oProfileIndex,
out dProfileSubIndex, out dPosition, out bIsGranted);
if (bRet == false)
{
return ec.ST_ORGANISATION_CAN_NOT_FIND_PROFILE;
}
if (bIsNewGranted && bIsGranted)
{
return ec.ST_ORGANISATION_MEMBER_ALREADY_GRANT;
}
return dUpdate(GRANT_ACCESS_FIELD, bIsNewGranted.ToString(), sqlIsIndex(oOrganisationIndex, oProfileIndex.dIndex)) == ec.ST_SUCCEED
?
ec.ST_SUCCEED : ec.ST_ORGANISATION_MEMBER_UPDATE_FAILED;
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for Class1.
///
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CRankVoting : CVoting
{
public CRankVoting(SVoteRight[] oVoteRight)
: base( oVoteRight)
{
//m_oVoteRight = oVoteRight;
m_oRankVotingList = new SortedList();
m_oMemeIndexList = new SortedList();
}
SortedList m_oRankVotingList, m_oMemeIndexList;
public void vAdd(int dProfileIndex, SMemeCompare[] oMemeCompare)
{
if (oMemeCompare != null)
{
CProfileRankVoting oProfileRankVoting = new CProfileRankVoting(dProfileIndex);
for (int j = 0; j < oMemeCompare.Length; j++)
{
if (oMemeCompare[j].dProfileIndexIndex == dProfileIndex)
{
if (m_oMemeIndexList.Contains(oMemeCompare[j].dMemeIndex) == false)
{
m_oMemeIndexList.Add(oMemeCompare[j].dMemeIndex, null);
}
if (m_oMemeIndexList.Contains(oMemeCompare[j].dMemeReferenceIndex) == false)
{
m_oMemeIndexList.Add(oMemeCompare[j].dMemeReferenceIndex, null);
}
oProfileRankVoting.vAdd(oMemeCompare[j], oMemeCompare[j].dExecutionFeature);
}
}
m_oRankVotingList.Add(dProfileIndex, oProfileRankVoting);
}
}
public void vAdd(SMemeCompare[] oMemeCompareArray)
{
for (int i = 0; i < m_oVoteRight.Length; i++)
{
vAdd(m_oVoteRight[i].dProfileIndex, oMemeCompareArray);
}
}
public struct SBottomCount
{
public int dMemeIndex;
// public int dMainIndex;
public int dCount;
/*
public SIndex iMemeIndex
{
get
{
if (CDbEPBase.IsUsed(dMainIndex))
{
return new SIndex(dMainIndex, dMemeIndex);
}
else
{
return new SIndex(dMemeIndex, CDbEPBase.NOT_USED);
}
}
}*/
}
public struct SMemeRank
{
public SMemeRank(SBottomCount _oMeme)
{
oMeme = _oMeme;
dExecutiveRestriction = ENExecution.Independant;
dMemeWinnerIndex = -999;
}
public SBottomCount oMeme;
public ENExecution dExecutiveRestriction;
public int dMemeWinnerIndex;
}
public void vRemove(ref SortedList oRankVotingList, int dMemeIndex)
{
for (int i = 0; i < oRankVotingList.Count; i++)
{
((CProfileRankVoting)oRankVotingList.GetByIndex(i)).vRemove(dMemeIndex);
}
}
public void vVoteSelection(SBottomCount[] oIndexMemeRankList, out SMemeRank[] oMemeRankList, ref CTraceReport oTraceReport)
{
if (oIndexMemeRankList.Length == 0)
{
CTrace.i().vWriteLn(ENMessage.Organisation,"oIndexMemeRankList empty");
oMemeRankList = null;
}
else
{
SortedList oRankVotingList = m_oRankVotingList;
oMemeRankList = new SMemeRank[oRankVotingList.Count];
oMemeRankList[0].oMeme = oIndexMemeRankList[oIndexMemeRankList.Length - 1];
oMemeRankList[0].dExecutiveRestriction = ENExecution.Independant;
oMemeRankList[0].dMemeWinnerIndex = NOT_USED;
int dMemeRankListCount = 1;
for (int i = oIndexMemeRankList.Length - 2; i >= 0; i--)
{
SMemeRank oMemeToEvaluatuate = new SMemeRank(oMemeRankList[oIndexMemeRankList.Length - i].oMeme);
oMemeToEvaluatuate.dExecutiveRestriction = ENExecution.Independant;
CListReport oSummaryReport = new CListReport(5);
oSummaryReport.Active = oTraceReport.Active;
oSummaryReport.vSetTitle("Exclusion Meme Rank =" + oIndexMemeRankList.Length);
oSummaryReport.vSetHeader("Bottom_Meme", "Compare_Meme", "Vote", "Count", "Exclusion");
int dIndexRank=0, dCount=0;
for (int j = 0; j < dMemeRankListCount; j++)
{
CListReport oDetailProfileReport = new CListReport(4);
oDetailProfileReport.Active = oTraceReport.Active;
oDetailProfileReport.vSetTitle("Exclusion Meme Rank =" + oIndexMemeRankList.Length);
oDetailProfileReport.vSetHeader("Bottom_Meme", "Compare_Meme", "Profile", "Vote");
dCount = dIndexRank = 0;
oMemeToEvaluatuate.dMemeWinnerIndex = oMemeRankList[j].oMeme.dMemeIndex;
foreach(DictionaryEntry oMemeRankEntry in m_oRankVotingList)
{
int dProfileIndex= (int)oMemeRankEntry.Key;
dCount++;
CProfileRankVoting oProfileGradeVoting = (CProfileRankVoting)oMemeRankEntry.Value;
ENExecution dExecutiveRestriction = oProfileGradeVoting.dGetExecutionFeatureIndex(oMemeRankList[j].oMeme.dMemeIndex, oMemeToEvaluatuate.oMeme.dMemeIndex);
if (dExecutiveRestriction == ENExecution.Exclusive)
{
dIndexRank += 2;
}
else if (dExecutiveRestriction == ENExecution.DoneOnlyIfOtherDone)
{
dIndexRank += 1;
}
else
{
dExecutiveRestriction = oProfileGradeVoting.dGetExecutionFeatureIndex(oMemeToEvaluatuate.oMeme.dMemeIndex, oMemeRankList[j].oMeme.dMemeIndex);
if (dExecutiveRestriction == ENExecution.Exclusive)
{
dIndexRank += 2;
}
}
oDetailProfileReport.vAdd(oMemeToEvaluatuate.oMeme.dMemeIndex, oMemeRankList[j].oMeme.dMemeIndex, dProfileIndex, dIndexRank);
}
int dRankVote = CFeatureTypeFactory.Instance().oGet(P.EXECUTIVE_FEATURE).dGetRoundOnIndex((double)dIndexRank / dCount);
if (dRankVote > 0)
{
if (dRankVote == 0)
{
oMemeToEvaluatuate.dExecutiveRestriction = ENExecution.Independant;
}
else if (dRankVote == 1)
{
oMemeToEvaluatuate.dExecutiveRestriction = ENExecution.DoneOnlyIfOtherDone;
}
else
{
oMemeToEvaluatuate.dExecutiveRestriction = ENExecution.Exclusive;
}
oMemeToEvaluatuate.dMemeWinnerIndex = oMemeRankList[j].oMeme.dMemeIndex;
oTraceReport.vAdd(oDetailProfileReport);
break;
}
}
oMemeRankList[oIndexMemeRankList.Length - i] = oMemeToEvaluatuate;
oSummaryReport.vAdd(oMemeToEvaluatuate.oMeme.dMemeIndex, oMemeToEvaluatuate.dMemeWinnerIndex, dCount>0 ? (double)dIndexRank
/ dCount: -999,
dCount,oMemeToEvaluatuate.dExecutiveRestriction.ToString());
oTraceReport.vAdd(oSummaryReport);
}
}
}
//dGetExecutionRelation(int[] dMemeArray, int dMemeIndex)
public void vVote(out SBottomCount[] oIndexMemeRankList, ref CTraceReport oTraceReport)
{
SortedList oRankVotingList = m_oRankVotingList;
oIndexMemeRankList = new SBottomCount[m_oMemeIndexList.Count];
int dMemeRankIndex = 0;
while (m_oMemeIndexList.Count > 0)
{
SBottomCount[] oMemeCountArray = new SBottomCount[m_oMemeIndexList.Count];
CListReport oDetailProfileReport = new CListReport(3);
oDetailProfileReport.Active = oTraceReport.Active;
oDetailProfileReport.vSetTitle("Bottom popularity detail report meme total=" + oRankVotingList.Count);
oDetailProfileReport.vSetHeader("Bottom_Meme", "Profile", "Vote_right");
CListReport oDetailReport = new CListReport(2);
oDetailReport.Active = oTraceReport.Active;
oDetailReport.vSetTitle("Bottom popularity detail report meme total=" + oRankVotingList.Count);
oDetailReport.vSetHeader("Meme", "Bottom_count");
for (int i = 0; i < m_oMemeIndexList.Count; i++)
{
oMemeCountArray[i].dMemeIndex = (int)m_oMemeIndexList.GetKey(i);
oMemeCountArray[i].dCount = 0;
foreach (DictionaryEntry oRankVotingEntry in oRankVotingList)
{
CProfileRankVoting oProfileGradeVoting = (CProfileRankVoting)oRankVotingEntry.Value;
int dProfileIndex = (int)oRankVotingEntry.Key;
if (oProfileGradeVoting.bIsAtPopularityBottom(oMemeCountArray[i].dMemeIndex))
{
oMemeCountArray[i].dCount += dGetVoteRight(dProfileIndex);
oDetailProfileReport.vAdd(CReport.MEME + oMemeCountArray[i].dMemeIndex, CReport.MEMBER + dProfileIndex, dGetVoteRight(dProfileIndex));
}
}
oDetailReport.vAdd(CReport.MEME + oMemeCountArray[i].dMemeIndex, oMemeCountArray[i].dCount);
}
oTraceReport.vAdd(oDetailProfileReport); oTraceReport.vAdd(oDetailReport);
if (oMemeCountArray.Length >= 1)
{
SBottomCount oBottomCountMax = oMemeCountArray[0];
for (int j = 1; j < oMemeCountArray.Length; j++)
{
if (oBottomCountMax.dCount < oMemeCountArray[j].dCount)
{
oBottomCountMax = oMemeCountArray[j];
}
}
oIndexMemeRankList[dMemeRankIndex] = oBottomCountMax;
oTraceReport.vAddLine(dMemeRankIndex + ":Remove meme " + CReport.MEME + oBottomCountMax.dMemeIndex + " Count=" + oBottomCountMax.dCount);
dMemeRankIndex++;
vRemove(ref oRankVotingList, oBottomCountMax.dMemeIndex);
m_oMemeIndexList.Remove(oBottomCountMax.dMemeIndex);
}
}
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for Class1.
///
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CProfileRankVoting : CProfileVoting
{
public CProfileRankVoting(int dVoteRight)
: base(dVoteRight)
{
m_oMemeList = new SortedList();
}
SortedList m_oMemeList;
public class CMemeLink
{
public CMemeLink(int _dLessPopularIndex, ENExecution _dExecutionFeatureIndex)
{
m_oMostPopularMeme = new ArrayList();
m_dLessPopularIndex = _dLessPopularIndex;
m_dExecutionFeatureIndex = _dExecutionFeatureIndex;
}
public void vAdd(int dMemeSupIndex)
{
m_oMostPopularMeme.Add(dMemeSupIndex);
}
public int m_dLessPopularIndex;
public ENExecution m_dExecutionFeatureIndex;
public ArrayList m_oMostPopularMeme;
}
public void vAdd(SMemeCompare oMemeCompare, ENExecution _dExecutionFeatureIndex)
{
m_oMemeList.Add(oMemeCompare.dMemeIndex, new CMemeLink(oMemeCompare.dMemeReferenceIndex, _dExecutionFeatureIndex));
CMemeLink oMemeLink = (CMemeLink)m_oMemeList[oMemeCompare.dMemeReferenceIndex];
if (oMemeLink != null)
{
oMemeLink.vAdd(oMemeCompare.dMemeIndex);
m_oMemeList.RemoveAt(oMemeCompare.dMemeReferenceIndex);
m_oMemeList.Add(oMemeCompare.dMemeReferenceIndex, oMemeLink);
}
}
public bool bIsAtPopularityBottom(int dMemeIndex)
{
return m_oMemeList[dMemeIndex] == null;
}
public void vRemove(int dMemeIndex)
{
CMemeLink oMemeLink = (CMemeLink)m_oMemeList[dMemeIndex];
if (oMemeLink != null)
{
for (int i = 0; i < oMemeLink.m_oMostPopularMeme.Count; i++)
{
int dMostPopularMemeIndex= (int)oMemeLink.m_oMostPopularMeme[i];
CMemeLink oMemeSupLink = ((CMemeLink)m_oMemeList[dMostPopularMemeIndex]);
if (oMemeSupLink != null)
{
oMemeSupLink.m_dLessPopularIndex = oMemeLink.m_dLessPopularIndex;
m_oMemeList.RemoveAt(dMostPopularMemeIndex);
m_oMemeList.Add(dMostPopularMemeIndex, oMemeSupLink);
}
}
}
}
public ENExecution dGetExecutionFeatureIndex(int dMemeIndex1, int dMemeIndex2)
{
int _dMemeIndex1 = dMemeIndex1;
while (true)
{
CMemeLink oMeme1 = ((CMemeLink)m_oMemeList[_dMemeIndex1]);
if (oMeme1 == null)
{
return ENExecution.Independant;
}
if (dMemeIndex2 == oMeme1.m_dLessPopularIndex)
{
return oMeme1.m_dExecutionFeatureIndex;
}
else
{
_dMemeIndex1 = oMeme1.m_dLessPopularIndex;
}
}
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for Class1.
///
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CVoting : CVoteBase
{
public CVoting( SVoteRight[] oVoteRight)
{
m_oVoteRight = oVoteRight;
}
protected SVoteRight[] m_oVoteRight;
public int dGetVoteRight(int dProfileIndex)
{
return dGetVoteRight(m_oVoteRight, dProfileIndex);
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
public abstract class CGradeVoting : CVoting
{
public CGradeVoting( SVoteRight[] oVoteRight)
: base( oVoteRight)
{
m_oGradeVotingList = new SortedList();
m_oMemeIndexList = new SortedList();
}
protected void vAdd(int dProfileIndex, SVoteGrade[] oVoteGradeArray)
{
CProfileGradeVoting oProfileGradeVoting = new CProfileGradeVoting(dGetVoteRight(dProfileIndex));
for (int j = 0; j < oVoteGradeArray.Length; j++)
{
if (oVoteGradeArray[j].dProfileIndexIndex == dProfileIndex)
{
m_oMemeIndexList.Add(oVoteGradeArray[j].dMemeIndex, null);
oProfileGradeVoting.vAdd(new CProfileGradeVoting.SGrade(oVoteGradeArray[j].dMemeIndex, oVoteGradeArray[j].dGrade));
}
}
m_oGradeVotingList.Add(dProfileIndex, oProfileGradeVoting);
}
protected SortedList m_oGradeVotingList, m_oMemeIndexList;
public abstract void vVote(out SVoteGradeResult[] oVoteGradeResultArray, ref CTraceReport oTraceReport);
public void vAdd(SVoteGrade[] oVoteGradeArray)
{
for (int i = 0; i < m_oVoteRight.Length; i++)
{
vAdd(m_oVoteRight[i].dProfileIndex, oVoteGradeArray);
}
}
public int dBallotCount
{
get
{
int dBallotCount = 0;
foreach (DictionaryEntry oGradeVotingEntry in m_oGradeVotingList)
{
CProfileGradeVoting oProfileGradeVoting = (CProfileGradeVoting)oGradeVotingEntry.Value;
dBallotCount += oProfileGradeVoting.dVoteRight;
}
return dBallotCount;
}
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CGradeAverageVoting : CGradeVoting
{
public CGradeAverageVoting(ENPonderation enPonderation, SVoteRight[] oVoteRight)
: base( oVoteRight)
{
m_enPonderation = enPonderation;
}
ENPonderation m_enPonderation;
public enum ENPonderation
{
Normal,
Ponderate,
Normalized
}
public override void vVote(out SVoteGradeResult[] oVoteGradeResultArray, ref CTraceReport oTraceReport)
{
oVoteGradeResultArray = new SVoteGradeResult[m_oMemeIndexList.Count];
CListReport oDetailReport = new CListReport(4);
oDetailReport.Active = oTraceReport.Active;
oDetailReport.vSetTitle("Detail vote by grade");
oDetailReport.vSetHeader("Meme", "Profile", "Vote right", "Grade");
int i = 0;
foreach (DictionaryEntry oMemeIndexEntry in m_oMemeIndexList)
{
int dMemeIndex = (int)oMemeIndexEntry.Key;
foreach (DictionaryEntry oGradeVotingEntry in m_oGradeVotingList)
{
int dProfileIndex = (int)oGradeVotingEntry.Key;
CProfileGradeVoting oProfileGradeVoting = (CProfileGradeVoting)oGradeVotingEntry.Value;
if (oProfileGradeVoting != null)
{
double dbGrade;
if (m_enPonderation == ENPonderation.Ponderate) {
dbGrade= oProfileGradeVoting.dbGetPonderation(dMemeIndex);
}
else if (m_enPonderation == ENPonderation.Normalized) {
dbGrade= oProfileGradeVoting.dbGetNormalizedGrade(dMemeIndex);
}
else {
dbGrade= oProfileGradeVoting.dbGetGrade(dMemeIndex);
}
if (IsUsed(dbGrade))
{
oVoteGradeResultArray[i].dCount += oProfileGradeVoting.dVoteRight; oVoteGradeResultArray[i].dSumGrade += oProfileGradeVoting.dVoteRight
* dbGrade;
oDetailReport.vAdd(CReport.MEME + dMemeIndex, CReport.MEMBER + dProfileIndex, oProfileGradeVoting.dVoteRight, dbGrade);
}
}
}
i++;
}
oTraceReport.vAdd(oDetailReport);
CListReport oVoteGradeReport = new CListReport(2);
oVoteGradeReport.Active = oTraceReport.Active;
oVoteGradeReport.vSetTitle("Result vote");
oVoteGradeReport.vSetHeader("Meme", "Average Grade");
for (int j = 0; j < oVoteGradeResultArray.Length; j++)
{
oVoteGradeReport.vAdd(CReport.MEME + oVoteGradeResultArray[j].dMemeIndex, oVoteGradeResultArray[j].dbAvg);
}
oTraceReport.vAdd(oVoteGradeReport);
//SVoteGradeResult
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CGradeRankVoting : CGradeVoting
{
public CGradeRankVoting( SVoteRight[] oVoteRight)
: base( oVoteRight)
{
}
public override void vVote(out SVoteGradeResult[] oVoteGradeResultArray, ref CTraceReport oTraceReport)
{
oVoteGradeResultArray = new SVoteGradeResult[m_oMemeIndexList.Count];
CListReport oDetailReport = new CListReport(4);
oDetailReport.Active = oTraceReport.Active;
oDetailReport.vSetTitle("Detail vote by grade");
oDetailReport.vSetHeader("Meme", "Profile", "Vote right", "Grade");
int i = 0;
foreach (DictionaryEntry oMemeEntry in m_oMemeIndexList)
{
int dMemeIndex = (int)oMemeEntry.Key;
foreach (DictionaryEntry oGradeVotingEntry in m_oGradeVotingList)
{
int dProfileIndex = (int)oGradeVotingEntry.Key;
CProfileGradeVoting oProfileGradeVoting = (CProfileGradeVoting)oGradeVotingEntry.Value;
if (oProfileGradeVoting != null)
{
double dbRank = oProfileGradeVoting.dGetRank(dMemeIndex);
if (dbRank == oProfileGradeVoting.dCount)
{
dbRank = (m_oMemeIndexList.Count - oProfileGradeVoting.dCount) / 2 + oProfileGradeVoting.dCount;
}
oVoteGradeResultArray[i].dCount += oProfileGradeVoting.dVoteRight; oVoteGradeResultArray[i].dSumGrade += oProfileGradeVoting.dVoteRight
* dbRank / m_oMemeIndexList.Count;
oDetailReport.vAdd(CReport.MEME + dMemeIndex, CReport.MEMBER + dProfileIndex, oProfileGradeVoting.dVoteRight, dbRank / m_oMemeIndexList.Count);
}
}
i++;
}
oTraceReport.vAdd(oDetailReport);
CListReport oVoteGradeReport = new CListReport(2);
oVoteGradeReport.Active = oTraceReport.Active;
oVoteGradeReport.vSetTitle("Result vote");
oVoteGradeReport.vSetHeader("Meme", "Average Grade");
for (int j = 0; j < oVoteGradeResultArray.Length; j++)
{
oVoteGradeReport.vAdd(CReport.MEME + oVoteGradeResultArray[j].dMemeIndex, oVoteGradeResultArray[j].dbAvg);
}
oTraceReport.vAdd(oVoteGradeReport);
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for Class1.
///
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CProfileVoting : CVoteBase
{
public CProfileVoting(int dVoteRight)
{
m_dVoteRight = dVoteRight;
}
int m_dVoteRight;
public int dVoteRight
{
get
{
return m_dVoteRight;
}
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CProfileGradeVoting : CProfileVoting
{
public CProfileGradeVoting(int dVoteRight)
: base(dVoteRight)
{
m_oMemeList = new SortedList();
m_dSum = m_dSquareSum = 0;
}
public struct SGrade
{
public SGrade(int _dIndex, double _dbGrade)
{
dIndex = _dIndex;
dbGrade = _dbGrade;
dRank = NOT_USED;
}
public int dIndex;
public double dbGrade;
public int dRank;
}
public void vAdd(SGrade oGrade)
{
m_oMemeList.Add(oGrade.dIndex, oGrade);
}
SortedList m_oMemeList; //, m_oMemeGradeRankList;
public int dProfileIndex;
double m_dSum;
double m_dSquareSum;
public int dCount
{
get
{
return m_oMemeList.Count;
}
}
public double dSum
{
get
{
if (m_dSum == 0)
{
for (int i = 0; i < m_oMemeList.Count; i++)
{
m_dSum += ((SGrade)m_oMemeList[i]).dbGrade;
}
}
return m_dSum;
}
}
public double dAvg
{
get
{
if (m_oMemeList.Count > 0)
{
return dSum / m_oMemeList.Count;
}
return NOT_USED;
}
}
public double dStd
{
get
{
if (m_dSquareSum == 0)
{
foreach (SGrade oMemGrade in m_oMemeList)
{
double dEcard = oMemGrade.dbGrade - dAvg;
m_dSquareSum += dEcard * dEcard;
}
}
if (m_oMemeList.Count > 1)
{
return Math.Sqrt(m_dSquareSum / m_oMemeList.Count);
}
return NOT_USED;
}
}
public double dbGetGrade(int dMemeIndex)
{
if (dMemeIndex >= 0 && dMemeIndex < m_oMemeList.Count)
{
return ((SGrade)m_oMemeList[dMemeIndex]).dbGrade;
}
return NOT_USED;
}
public double dbGetNormalizedGrade(int dMemeIndex)
{
double dbGrade = dbGetGrade(dMemeIndex);
if (dbGrade == NOT_USED)
{
return NOT_USED;
}
return dbNormalizedGrade(dbGrade);
}
public int dGetRank(int dMemeIndex)
{
if (m_oMemeList.Count > 0 && IsNotUsed(((SGrade)m_oMemeList[dMemeIndex]).dRank))
{
SortedList oMemeGradeRankList = new SortedList();
for (int i = 0; i < m_oMemeList.Count; i++)
{
oMemeGradeRankList.Add(((SGrade)m_oMemeList[i]).dbGrade, ((SGrade)m_oMemeList[i]).dIndex);
}
for (int i = 0; i < oMemeGradeRankList.Count; i++)
{
int dNewMemeIndex = (int)oMemeGradeRankList.GetByIndex(i);
SGrade oGrade = ((SGrade)m_oMemeList[dNewMemeIndex]);
oGrade.dRank = i;
m_oMemeList[dNewMemeIndex] = oGrade;
}
}
return m_oMemeList.Contains(dMemeIndex) ? ((SGrade)m_oMemeList[dMemeIndex]).dRank : m_oMemeList.Count;
}
public double dbNormalizedGrade(double dbGrade)
{
return Math.Sqrt((dbGrade - dAvg) * (dbGrade - dAvg)) / m_dSquareSum;
}
public double dbGetPonderation(int dMemeIndex)
{
double dbGrade = dbGetGrade(dMemeIndex);
if (dbGrade == NOT_USED)
{
return NOT_USED;
}
return dbGrade/ dSum;
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for Class1.
///
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CVoteBase : CCommandFactoryBase
{
static public string ToString(SVoteRight[] oVoteRightArray)
{
if (oVoteRightArray.Length == 0) return null;
StringBuilder sResult = new StringBuilder(oVoteRightArray[0].dProfileIndex.ToString());
for (int i = 1; i < oVoteRightArray.Length; i++)
{
sResult.Append(','); sResult.Append(oVoteRightArray[i].dProfileIndex.ToString());
}
return sResult.ToString();
}
public struct SVoteRight
{
public int dProfileIndex;
public int dVoteCoefficient;
}
public struct SProfile
{
public int dIndex;
public string sDisplayName;
}
static public ArrayList ToArrayList(SVoteRight[] oVoteRight)
{
ArrayList oVoteArray = new ArrayList(oVoteRight.Length);
for (int i = 0; i < oVoteRight.Length; i++)
{
SProfile oProfile;
oProfile.dIndex = oVoteRight[i].dProfileIndex;
oProfile.sDisplayName = "Profile" + oVoteRight[i].dProfileIndex;
oVoteArray.Add(oProfile);
}
return oVoteArray;
}
public static SVoteGrade[] ToVoteGrade(ArrayList oArray)
{
SVoteGrade[] oVoteGradeArray = new SVoteGrade[oArray.Count];
for (int i = 0; i < oArray.Count; i++)
{
object[] oObjArray = (object[])oArray[i];
oVoteGradeArray[i].dProfileIndexIndex = Convert.ToInt32(oObjArray[0]);
oVoteGradeArray[i].dMemeIndex = Convert.ToInt32(oObjArray[1]);
oVoteGradeArray[i].dGrade = Convert.ToInt32(oObjArray[2]);
}
return oVoteGradeArray;
}
public static SMemeCompare[] ToMemeCompareArray(int dMemeIndex, ArrayList oArrayList)
{
if (oArrayList == null || oArrayList.Count == 0) return null;
SMemeCompare[] oMemeCompare = new SMemeCompare[oArrayList.Count];
for (int i = 0; i < oArrayList.Count; i++)
{
object[] oObjectArray = (object[])oArrayList[i];
oMemeCompare[i].vSet(dMemeIndex, oObjectArray);
}
return oMemeCompare;
}
public struct SVoteRegister
{
public SIndex oOrganisationIndex;
public int dVoteIdentifier;
public int dMemeIndex;
public int dEntityIndex;
public CIdentifier oIdentifier;
public byte[] m_oVoteResultBinary;
}
public struct SMemeCompare
{
/* public SMemeCompare(int dMemeIndex, object[] oObjectArray)
{
vSet(dMemeIndex, oObjectArray);
}*/
public void vSet(int dMemeIndex, object[] oObjectArray)
{
m_dMemeIndex = dMemeIndex;
m_dProfileIndexIndex = Convert.ToInt32(oObjectArray[0]);
m_dIndex = Convert.ToInt32(oObjectArray[1]);
m_dReferenceIndex = Convert.ToInt32(oObjectArray[2]);
P dComparator = (P)Convert.ToInt32(oObjectArray[3]);
EPAssert(m_dMemeIndex != m_dReferenceIndex, "You can not compare a meme with himself");
switch (dComparator)
{
case P.EXCLUSIVE_EXECUTION:
m_dExecutionFeature = ENExecution.Exclusive;
break;
case P.DEPENDANT_EXECUTION:
m_dExecutionFeature = ENExecution.DoneOnlyIfOtherDone;
break;
case P.INDEPENDANT_EXECUTION:
default:
m_dExecutionFeature = ENExecution.Independant;
break;
}
}
int m_dMemeIndex;
public int dMemeIndex
{
get
{
return m_dIndex;
}
}
public int dMemeReferenceIndex
{
get
{
return m_dReferenceIndex;
}
}
public SIndex iMemeIndex
{
get
{
if (IsUsed(m_dMemeIndex))
{
return new SIndex(m_dMemeIndex, m_dIndex);
}
else
{
return new SIndex( m_dIndex, NOT_USED);
}
}
}
public SIndex iMemeReferenceIndex
{
get
{
if (IsUsed(m_dMemeIndex))
{
return new SIndex(m_dMemeIndex, m_dReferenceIndex);
}
else
{
return new SIndex(m_dReferenceIndex, NOT_USED);
}
}
}
public ENExecution dExecutionFeature
{
get
{
return m_dExecutionFeature;
}
}
public int dProfileIndexIndex
{
get
{
return m_dProfileIndexIndex;
}
}
private int m_dProfileIndexIndex;
private int m_dIndex;
private int m_dReferenceIndex;
private ENExecution m_dExecutionFeature;
}
public struct SVoteGrade
{
public int dProfileIndexIndex;
public int dMemeIndex;
public int dGrade;
}
public struct SVoteGradeResult
{
public SVoteGradeResult(int _dMemeIndex)
{
dMemeIndex = _dMemeIndex;
dSumGrade = dCount = 0;
}
public int dMemeIndex;
public double dSumGrade;
public int dCount;
public double dbAvg
{
get
{
return dSumGrade / dCount;
}
}
}
static SVoteGradeResult NOT_USED_VOTE_GRADE_RESULT = new SVoteGradeResult(NOT_USED);
static public SVoteGradeResult dGetWinner(SVoteGradeResult[] oVoteGradeResultArray)
{
if (oVoteGradeResultArray.Length == 0) return NOT_USED_VOTE_GRADE_RESULT;
SVoteGradeResult oSVoteGradeResult = oVoteGradeResultArray[0];
for (int i = 0; i < oVoteGradeResultArray.Length; i++)
{
if (oVoteGradeResultArray[i].dbAvg > oSVoteGradeResult.dbAvg)
{
oSVoteGradeResult = oVoteGradeResultArray[i];
}
}
return oSVoteGradeResult;
}
static public int dGetVoteRight(SVoteRight[] oVoteRightArray, int dProfileIndex)
{
if (oVoteRightArray != null)
{
for (int i = 0; i < oVoteRightArray.Length; i++)
{
if (oVoteRightArray[i].dProfileIndex == dProfileIndex)
{
return oVoteRightArray[i].dVoteCoefficient;
}
}
}
return 0;
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for Class1.
///
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CVoteView : CDbJoinView
{
public CVoteView(string sViewName, string sDatabaseName)
:
base(new CDbTableView(RESULT_PREFIXE, new CVoteResultTable(sDatabaseName)),
new CDbTableView(DETAIL_PREFIXE, new CDbSTable(DETAIL_PREFIXE + '_' + sViewName, sDatabaseName)))
{
VoteDetailTable.vAddColumn(ORGANISATION_INDEX_FIELD, INTEGER_TYPE, true);
VoteDetailTable.vAddColumn(VOTE_UNIT_IDENTIFIER, INTEGER_TYPE, true);
VoteDetailTable.vAddColumn(SUPPORT_FIELD, INTEGER_TYPE, false);
vAddLinkIndex(RESULT_PREFIXE, ORGANISATION_INDEX_FIELD, DETAIL_PREFIXE, ORGANISATION_INDEX_FIELD);
vAddLinkIndex(RESULT_PREFIXE, VOTE_UNIT_IDENTIFIER, DETAIL_PREFIXE, VOTE_UNIT_IDENTIFIER);
}
public CVoteResultTable VoteResultTable
{
get
{
return (CVoteResultTable)((CDbTableView)this.GetMasterView).oGetTable;
}
}
public CDbSTable VoteDetailTable
{
get
{
return (CDbSTable)((CDbTableView)this.GetSlaveView).oGetTable;
}
}
public string sqlIsIndex(SIndex oOrganisationIndex, int dVoteIdentifier)
{
return VoteResultTable.sqlIsOrganisation(oOrganisationIndex) + AND + VoteDetailTable.sFieldEqual(VOTE_UNIT_IDENTIFIER, dVoteIdentifier);
}
public ec dGetSelectBallot(SIndex oOrganisationIndex, int dVoteIdentifier, out ArrayList oBallotArray)
{
ec dRC = VoteDetailTable.dGetSelect(sqlIsIndex(oOrganisationIndex, dVoteIdentifier), out oBallotArray, PROFILE_INDEX_FIELD,
CVoteResultTable.SUPPORT_FIELD);
return dRC;
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CVoteBooleanView : CVoteView
{
public CVoteBooleanView(string sViewName, string sDatabaseName)
: base(sViewName, sDatabaseName)
{
}
public ec dVote(SIndex oOrganisationIndex, P dVoteIdentifier, CVoteBase.SVoteRight[] oVoteRight, TimeSpan oNextElectionSpan,
SBallot[] oBallotArray, out SBallotResult oBallotResult, ref CTraceReport oTraceReport)
{
bVoteCount(oVoteRight, oBallotArray, out oBallotResult, ref oTraceReport);
ec dRC = VoteResultTable.dSetResult(oOrganisationIndex, dVoteIdentifier, oBallotResult.bWon ? 1 : 0, oNextElectionSpan, GetSerializedValue(oBallotResult));
return dRC;
}
static public bool bVoteCount(CVoteBase.SVoteRight[] oVoteRight, SBallot[] oBallotArray, out SBallotResult oBallotResult,
ref CTraceReport oTraceReport)
{
oBallotResult.dVoteInFavor = oBallotResult.dVoteAgainst = 0;
CListReport oDetailReport = new CListReport(4);
oDetailReport.Active = oTraceReport.Active;
oDetailReport.vSetTitle("Detail vote by grade");
oDetailReport.vSetHeader("Profile", "Vote Right");
for (int i = 0; i < oBallotArray.Length; i++)
{
int dVotingRight = CVoteBase.dGetVoteRight(oVoteRight, oBallotArray[i].dProfileIndexIndex);
if (oBallotArray[i].bVote)
{
oBallotResult.dVoteInFavor += dVotingRight;
}
else
{
oBallotResult.dVoteAgainst += dVotingRight;
}
oDetailReport.vAdd(CReport.MEMBER + oBallotArray[i].dProfileIndexIndex, oBallotArray[i].bVote ? dVotingRight : -dVotingRight);
}
oTraceReport.vAdd(oDetailReport);
return oBallotResult.bWon;
}
public struct SBallot
{
public int dProfileIndexIndex;
public bool bVote;
}
public struct SBallotResult
{
public int dVoteInFavor;
public int dVoteAgainst;
public bool bWon
{
get
{
return dVoteInFavor > dVoteAgainst;
}
}
}
public ec dGetSelectBallot(SIndex oOrganisationIndex, int dVoteIdentifier, out SBallot[] oBallotArray)
{
ArrayList oArrayList;
ec dRC = base.dGetSelectBallot(oOrganisationIndex, dVoteIdentifier, out oArrayList);
oBallotArray = new SBallot[oArrayList.Count];
if (dRC != ec.ST_SUCCEED)
{
for (int i = 0; i < oArrayList.Count; i++)
{
object[] oVote = (object[])oArrayList[i];
oBallotArray[i].dProfileIndexIndex = Convert.ToInt32(oVote[0]);
oBallotArray[i].bVote = Convert.ToBoolean(oVote[1]);
}
}
return dRC;
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CVoteFeatureView : CVoteView
{
public CVoteFeatureView( string sViewName, string sDatabaseName)
: base(sViewName, sDatabaseName)
{
}
public ec dVote(SIndex oOrganisationIndex, P dVoteIdentifier, CVoteBase.SVoteRight[] oVoteRight, TimeSpan oNextElectionSpan,
CVoteBase.SVoteGrade[] oBallotArray, out CVoteBase.SVoteGradeResult oBallotResult, ref CTraceReport oTraceReport)
{
CGradeRankVoting oGradeRankVoting = new CGradeRankVoting( oVoteRight);
oGradeRankVoting.vAdd(oBallotArray);
CVoteBase.SVoteGradeResult[] oBallotResultArray;
oGradeRankVoting.vVote(out oBallotResultArray, ref oTraceReport);
EPAssert(oBallotResultArray.Length == 1, " Should have only one result");
oBallotResult = oBallotResultArray[0];
ec dRC = VoteResultTable.dSetResult(oOrganisationIndex, dVoteIdentifier, CCommandFactoryBase.CFeatureTypeFactory.Instance().oGet(dVoteIdentifier).dGetRoundOnIndex(oBallotResult.dbAvg),
oNextElectionSpan, GetSerializedValue(oBallotResult));
return dRC;
}
public ec dGetSelectBallot(SIndex oOrganisationIndex, int dVoteIdentifier, out CVoteBase.SVoteGrade[] oBallotArray)
{
ArrayList oArrayList;
base.bAddDisplayColumn(MEMBER_PREFIXE, PROFILE_INDEX_FIELD);
base.bAddDisplayColumn(SUPPORT_FIELD, SUPPORT_FIELD);
ec dRC = base.dGetSelect(sqlIsIndex(oOrganisationIndex, dVoteIdentifier), out oArrayList);
oBallotArray = new CVoteBase.SVoteGrade[oArrayList.Count];
if (dRC != ec.ST_SUCCEED)
{
for (int i = 0; i < oArrayList.Count; i++)
{
object[] oVote = (object[])oArrayList[i];
oBallotArray[i].dProfileIndexIndex = Convert.ToInt32(oVote[0]);
oBallotArray[i].dGrade = Convert.ToInt32(oVote[1]);
oBallotArray[i].dMemeIndex = dVoteIdentifier;
}
}
return dRC;
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for Class1.
///
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CVoteResultTable : CDbSTable
{
public CVoteResultTable(string sDatabaseName)
: base(RESULT_TABLE_NAME, sDatabaseName)
{
vAddColumn(ORGANISATION_INDEX_FIELD, INTEGER_TYPE, true);
vAddColumn(ORGANISATION_SUB_INDEX_FIELD, INTEGER_TYPE, true);
vAddColumn(VOTE_UNIT_IDENTIFIER, INTEGER_TYPE, true);
vAddColumn(RESULT_FIELD, INTEGER_TYPE, false);
vAddColumn(LAST_VOTE_DATE_FIELD, DATE_TYPE, false);
vAddColumn(NEXT_VOTE_DATE_FIELD, DATE_TYPE, false);
vAddColumn(LAST_VOTE_CHANGE_DATE_FIELD, DATE_TYPE, false);
vAddColumn(LAST_VOTE_RESULT_FIELD, BINARY_TYPE, false);
}
public bool bIsDayToDoElection(SIndex oOrganisationIndex, P dVoteIdentifier)
{
return bIsDayToDoElection(sqlIsIndex(oOrganisationIndex, dVoteIdentifier));
}
public ec dSelectPendingVote(SIndex oOrganisationIndex, TimeSpan oNextElectionSpan, out int[] dVoteUnitArray)
{
ArrayList oResultArray;
ec dRC = base.dGetSelect(sFieldCompare(ENSQLRelation.infeq, NEXT_VOTE_DATE_FIELD, DateTime.Now.ToString()) + AND +
sqlIsOrganisation(oOrganisationIndex), out oResultArray, VOTE_UNIT_IDENTIFIER);
dVoteUnitArray = ToIntegerArray(oResultArray);
return dRC;
}
public bool bIsDayToDoElection(string sIndexWhere)
{
ArrayList oOutputArray;
ec dRC = dGetSelect(sIndexWhere, out oOutputArray, LAST_VOTE_DATE_FIELD, NEXT_VOTE_DATE_FIELD, LAST_VOTE_CHANGE_DATE_FIELD);
if (oOutputArray.Count == 0)
{
return false;
}
object[] oObjs = (object[])oOutputArray[0];
DateTime oLastVoteDate = Convert.ToDateTime(oObjs[0]);
DateTime oNextVoteDate = Convert.ToDateTime(oObjs[1]);
DateTime oLastVoteChangeDate = Convert.ToDateTime(oObjs[2]);
return IsUsed(oLastVoteChangeDate) && oLastVoteChangeDate > oLastVoteDate && oNextVoteDate < DateTime.UtcNow;
}
public ec dSetResult(SIndex oOrganisationIndex, P dVoteIdentifier, int dResult, TimeSpan oNextElectionSpan, byte[] byteElectionResult)
{
ec dRC = dSetElectionDate(oOrganisationIndex, dVoteIdentifier, dResult, oNextElectionSpan, byteElectionResult);
if (dRC != ec.ST_SUCCEED)
{
dRC = dAddElection(oOrganisationIndex, dVoteIdentifier, dResult, oNextElectionSpan, byteElectionResult);
}
return dRC;
}
public string sqlIsIndex(SIndex oOrganisationIndex, P dVoteIdentifier)
{
return sqlIsOrganisation(oOrganisationIndex) + AND + sFieldEqual(VOTE_UNIT_IDENTIFIER, dVoteIdentifier);
}
public ec dSetElectionDate(SIndex oOrganisationIndex, P dVoteIdentifier, int dResult, TimeSpan oNextElectionInterval, byte[]
oElectionResult)
{
return dSetElectionDate(sqlIsIndex(oOrganisationIndex, dVoteIdentifier), dResult, oNextElectionInterval, oElectionResult);
}
public ec dSetElectionDate(string sVoteKey, int dResult, TimeSpan oNextElectionInterval, byte[] oElectionResult)
{
DateTime oNextElectionDate = DateTime.UtcNow + oNextElectionInterval;
ec dRC = this.dUpdate(LAST_VOTE_DATE_FIELD, NEXT_VOTE_DATE_FIELD, RESULT_FIELD, DateTime.UtcNow.ToShortDateString(), oNextElectionDate.ToShortDateString(),
dResult.ToString(),
sVoteKey);
dRC = this.dUpdateBinary(LAST_VOTE_RESULT_FIELD, oElectionResult);
return dRC;
}
public ec dRefresh(SIndex oOrganisationIndex, P dVoteIdentifier)
{
return this.dUpdate(LAST_VOTE_CHANGE_DATE_FIELD, DateTime.UtcNow.ToString(), sqlIsIndex(oOrganisationIndex, dVoteIdentifier));
}
public ec dAddElection(SIndex oOrganisationIndex, P dVoteIdentifier, int dResult, TimeSpan oNextElectionInterval, byte[] oElectionResult)
{
base.vAddValue(oOrganisationIndex);
base.vAddValue(dVoteIdentifier);
base.vAddValue(dResult);
base.vAddValue(DateTime.UtcNow);
base.vAddValue(DateTime.UtcNow + oNextElectionInterval);
base.vAddValue(NOT_USED_DATE);
base.vAddValue(oElectionResult);
return base.dInsertIntoTable();
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
/* public class CVoteSubMemeResultTable : CVoteResultTable
{
public CVoteSubMemeResultTable(string sDatabaseName)
: base(ENBallotType.Meme, "SubMemeResultTable", sDatabaseName)
{
}
protected override void vAddColumnKey()
{
vAddColumn(MEME_INDEX_FIELD, INTEGER_TYPE, true);
}
public int dAddElection(SIndex oOrganisationIndex, int dVoteIdentifier, SIndex oMemeIndex, TimeSpan oNextElectionInterval,
byte[] oElectionResult)
{
base.vAddValue(oMemeIndex.dIndex);
return base.dAddElection(oOrganisationIndex, dVoteIdentifier, oMemeIndex.dSubIndex, oNextElectionInterval, ElectionResult);
}
public string sqlIsIndex(SIndex oOrganisationIndex, int dVoteIdentifier, int dMemeIndex)
{
return sqlIsOrganisation(oOrganisationIndex) + AND + sFieldEqual(VOTE_UNIT_IDENTIFIER, dVoteIdentifier)
+ AND + sFieldEqual(MEME_INDEX_FIELD, dMemeIndex);
}
public int dSetElectionDate(SIndex oOrganisationIndex, int dVoteIdentifier, SIndex oMemeIndex, TimeSpan oNextElectionInterval,
byte[] oElectionResult)
{
return dSetElectionDate(sqlIsIndex(oOrganisationIndex, dVoteIdentifier, oMemeIndex.dIndex), oMemeIndex.dSubIndex, oNextElectionInterval,
oElectionResult);
}
public int dSetResult(SIndex oOrganisationIndex, int dVoteIdentifier, SIndex oMemeIndex, TimeSpan oNextElectionInterval, byte[]
oElectionResult)
{
ec dRC = dSetElectionDate(oOrganisationIndex, dVoteIdentifier, oMemeIndex, oNextElectionSpan, byteElectionResult);
if (dRC != ec.ST_SUCCEED)
{
dRC = dAddElection(oOrganisationIndex, dVoteIdentifier, oMemeIndex, oNextElectionSpan, byteElectionResult);
}
return dRC;
}
}
*/
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CVoteSubMemeView : CDbJoinView
{
public CVoteSubMemeView(P dLanguage, string sDatabaseName)
: base(new CMemberVoteView( sDatabaseName),
new CDbTableView(DETAIL_PREFIXE, new CMemeSubAgreementTable(DETAIL_PREFIXE + "SubAgreementTable", sDatabaseName)))
{
m_dLanguage = dLanguage;
vAddLinkIndex(MEMBER_PREFIXE, PROFILE_INDEX_FIELD, DETAIL_PREFIXE, PROFILE_INDEX_FIELD);
vAddLinkIndex(RESULT_PREFIXE, VOTE_UNIT_IDENTIFIER, DETAIL_PREFIXE, MEME_INDEX_FIELD);
}
P m_dLanguage;
public CMemberVoteView MemberVoteView
{
get
{
return (CMemberVoteView)this.GetMasterView;
}
}
public CMemeSubAgreementTable VoteMemeSubAgreementTable
{
get
{
return (CMemeSubAgreementTable)((CDbTableView)this.GetSlaveView).oGetTable;
}
}
public ec dGetSelectBallot(SIndex oOrganisationIndex, int dMemeIndex, out CVoteBase.SVoteGrade[] oBallotArray)
{
ArrayList oArrayList;
base.bAddDisplayColumn(MEMBER_PREFIXE, PROFILE_INDEX_FIELD);
base.bAddDisplayColumn(DETAIL_PREFIXE, MEME_SUB_INDEX_FIELD);
base.bAddDisplayColumn(RESULT_PREFIXE, GRADE_FIELD);
base.bAddWhereOrganisation(MEMBER_PREFIXE, oOrganisationIndex);
base.bAddWhere(MEMBER_PREFIXE, MEME_INDEX_FIELD, dMemeIndex);
ec dRC = base.dGetSelect(out oArrayList);
oBallotArray = CVoteBase.ToVoteGrade(oArrayList);
return dRC;
}
public ec dVote(SIndex oOrganisationIndex, P dVoteIdentifier, CVoteBase.SVoteRight[] oVoteRight, TimeSpan oNextElectionSpan,
CVoteBase.SVoteGrade[] oBallotArray, out CVoteBase.SVoteGradeResult oBallotResult, ref CTraceReport oTraceReport)
{
CGradeRankVoting oGradeRankVoting = new CGradeRankVoting( oVoteRight);
oGradeRankVoting.vAdd(oBallotArray);
CVoteBase.SVoteGradeResult[] oBallotResultArray;
oGradeRankVoting.vVote(out oBallotResultArray, ref oTraceReport);
oBallotResult = CVoteBase.dGetWinner(oBallotResultArray);
ec dRC = MemberVoteView.VoteResultTable.dSetResult(oOrganisationIndex, dVoteIdentifier, oBallotResult.dMemeIndex, oNextElectionSpan,
GetSerializedValue(oBallotResult));
return dRC;
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for Class1.
///
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CMemberVoteView : CDbJoinView
{
public CMemberVoteView( string sDatabaseName)
:
base(new CDbTableView(RESULT_PREFIXE, new CVoteResultTable(sDatabaseName)),
new COrganisationMemberView(sDatabaseName))
{
vAddLinkIndex(RESULT_PREFIXE, ORGANISATION_INDEX_FIELD, COrganisationMemberView.ORGANISATION_PREFIXE, ORGANISATION_INDEX_FIELD);
vAddLinkIndex(RESULT_PREFIXE, ORGANISATION_SUB_INDEX_FIELD, COrganisationMemberView.ORGANISATION_PREFIXE, ORGANISATION_SUB_INDEX_FIELD);
//vAddLinkIndex(RESULT_PREFIXE, VOTE_UNIT_IDENTIFIER, DETAIL_PREFIXE, VOTE_UNIT_IDENTIFIER);
}
public CVoteResultTable VoteResultTable
{
get
{
return (CVoteResultTable)((CDbTableView)this.GetMasterView).oGetTable;
}
}
public COrganisationMemberView OrganisationMemberView
{
get
{
return (COrganisationMemberView)this.GetSlaveView;
}
}
public string sqlIsIndex(SIndex oOrganisationIndex, int dVoteIdentifier)
{
return VoteResultTable.sqlIsOrganisation(oOrganisationIndex) + AND + VoteResultTable.sFieldEqual(VOTE_UNIT_IDENTIFIER, dVoteIdentifier);
}
/* public int dGetSelectBallot(SIndex oOrganisationIndex, int dVoteIdentifier, out ArrayList oBallotArray)
{
ArrayList oArrayList;
return VoteDetailTable.dGetSelect(sqlIsIndex( oOrganisationIndex, dVoteIdentifier), out oArrayList, PROFILE_INDEX_FIELD,
SUPPORT_FIELD);
}*/
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for Class1.
///
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CMemeSubAgreementTable : CGradeTable
{
public CMemeSubAgreementTable(string sTableName, string sDatabaseName)
: base(sTableName, sDatabaseName)
{
vAddColumn(MEME_SUB_INDEX_FIELD, INTEGER_TYPE, true);
}
public ec dSelect(SIndex oProfileIndex, int dMemeIndex, out CVoteBase.SVoteGrade[] oVoteGradeArray)
{
ArrayList oOutputArray;
ec dRC = base.dGetSelect(sqlIsIndex(oProfileIndex, dMemeIndex), out oOutputArray, PROFILE_INDEX_FIELD, MEME_SUB_INDEX_FIELD,
GRADE_FIELD);
oVoteGradeArray = CVoteBase.ToVoteGrade(oOutputArray);
return dRC;
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CGradeTable : CDbSTable
{
public CGradeTable(string sTableName, string sDatabaseName)
: base(sTableName, sDatabaseName)
{
vAddColumn(PROFILE_INDEX_FIELD, INTEGER_TYPE, true);
vAddColumn(MEME_INDEX_FIELD, INTEGER_TYPE, true);
vAddColumn(GRADE_FIELD, INTEGER_TYPE, false);
}
public string sqlIsIndex(SIndex oProfileIndex, int dMemeIndex)
{
return sFieldEqual(PROFILE_INDEX_FIELD, oProfileIndex.dIndex) + AND + sFieldEqual(MEME_INDEX_FIELD, dMemeIndex);
}
public ec dSelect(int dProfileIndex, SIndex[] oMemeList, out CVoteBase.SVoteGrade[] oVoteGradeArray)
{
string sWhere = sFieldEqual(PROFILE_INDEX_FIELD, dProfileIndex) + AND +
MEME_INDEX_FIELD + "in(" + ToString(ToIndex(oMemeList)) + ") ";
ArrayList oOutputArray;
ec dRC = base.dGetSelect(sWhere, out oOutputArray, PROFILE_INDEX_FIELD, MEME_INDEX_FIELD, GRADE_FIELD);
oVoteGradeArray = CVoteBase.ToVoteGrade(oOutputArray);
return dRC;
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for Class1.
///
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CComparisonAgreementTable: CDbSTable
{
public CComparisonAgreementTable(string sTableName, string sDatabaseName)
: base(sTableName, sDatabaseName)
{
vAddColumn(PROFILE_INDEX_FIELD, INTEGER_TYPE, true);
vAddColumn(FIRST_INDEX_FIELD, INTEGER_TYPE, true);
vAddColumn(REFERENCE_INDEX_FIELD, INTEGER_TYPE, true);
vAddColumn(COMPARATOR_CONDITION_FIELD, ENTITY_TYPE, false);
}
public virtual ec dAdd(SIndex oProfileIndex, SIndex oMemeIndex, SIndex oMemeReferenceIndex, P dComparator, int dCriteriaMeme,
string sComment)
{
vAddValue(oProfileIndex.dIndex);
vAddValue(oMemeIndex.dIndex);
vAddValue(oMemeReferenceIndex.dIndex);
vAddValue(dComparator);
return dInsertIntoTable();
}
public ec dAdd(SIndex oProfileIndex, SIndex oMemeIndex, P dComparator, bool bSupport, int dCriteriaMemeIndex, string sComment)
{
if (bSupport)
{
return dAdd(oProfileIndex, oMemeIndex, NULL_SINDEX, dComparator, dCriteriaMemeIndex, sComment);
}
else
{
return dAdd(oProfileIndex, NULL_SINDEX, oMemeIndex, dComparator, dCriteriaMemeIndex, sComment);
}
}
public virtual ec dSelect(int dProfileIndex, SIndex[] oIdentifierIndexArray, out CVoteBase.SMemeCompare[] oMemeCompareArray)
{
string sIdentifierList = ToString(ToIndex(oIdentifierIndexArray));
string sExtraCondition = "(" + FIRST_INDEX_FIELD + " in(" + sIdentifierList + ")or ( " + REFERENCE_INDEX_FIELD + " in(" +
sIdentifierList + "))";
return dSelect(dProfileIndex, NOT_USED, sExtraCondition, out oMemeCompareArray);
}
protected ec dSelect(int dProfileIndex, int dMemeIndex, string sExtraCondition, out CVoteBase.SMemeCompare[] oMemeCompareArray)
{
string sWhere = sFieldEqual(PROFILE_INDEX_FIELD, dProfileIndex);
if (sExtraCondition != null)
{
sWhere += AND + sExtraCondition;
}
ArrayList oOutputArray;
ec dRC = base.dGetSelect(sWhere,
out oOutputArray, PROFILE_INDEX_FIELD, FIRST_INDEX_FIELD, REFERENCE_INDEX_FIELD, COMPARATOR_CONDITION_FIELD);
oMemeCompareArray = CVoteBase.ToMemeCompareArray(dMemeIndex, oOutputArray);
return dRC;
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for Class1.
///
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CMemeSubComparisonAgreementTable : CComparisonAgreementTable
{
public CMemeSubComparisonAgreementTable(string sTableName, string sDatabaseName)
: base(sTableName, sDatabaseName)
{
vAddColumn(MEME_INDEX_FIELD, INTEGER_TYPE, true);
}
// protected override void vAddFirstColumns() {}
public override ec dAdd(SIndex oProfileIndex, SIndex oMemeIndex, SIndex oMemeReferenceIndex, P dComparator, int dCriteriaMeme,
string sComment)
{
EPAssert(oMemeIndex.dIndex == oMemeReferenceIndex.dIndex, "This table has same meme and meme reference");
vAddValue(oProfileIndex.dIndex);
vAddValue(oMemeIndex.dSubIndex);
vAddValue(oMemeReferenceIndex.dSubIndex);
vAddValue(dComparator);
vAddValue(oMemeIndex.dIndex);
return dInsertIntoTable();
}
public override ec dSelect(int dProfileIndex, SIndex[] oIdentifierIndexArray, out CVoteBase.SMemeCompare[] oMemeCompareArray)
{
EPAssert(oIdentifierIndexArray.Length == 1, "Should have only one meme");
return dSelect(dProfileIndex, oIdentifierIndexArray[0].dIndex, sFieldEqual(MEME_INDEX_FIELD, oIdentifierIndexArray[0].dIndex),
out oMemeCompareArray);
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CCriteriaAgreementTable : CComparisonAgreementTable
{
public CCriteriaAgreementTable(string sTableName, string sDatabaseName)
: base(sTableName, sDatabaseName)
{
vAddColumn(CRITERIA_FIELD, INTEGER_TYPE, true);
vAddColumn(ANNOTATION_FIELD, STRING_TYPE, false);
}
// protected override void vAddFirstColumns(){}
public override ec dAdd(SIndex oProfileIndex, SIndex oMemeIndex, SIndex oMemeReferenceIndex, P dComparator, int dCriteriaMemeIndex,
string sComment)
{
vAddValue(oProfileIndex.dIndex);
vAddValue(oMemeIndex.dIndex);
vAddValue(oMemeReferenceIndex.dIndex);
vAddValue(dComparator);
vAddValue(dCriteriaMemeIndex);
vAddValue(sComment);
return dInsertIntoTable();
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for Class1.
///
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CRuleAgreementView : CDbJoinView
{
public CRuleAgreementView(CComparisonAgreementTable oRuleAgreementTable, string sDatabaseName)
: base(new CMemberVoteView( sDatabaseName),
new CDbTableView(DETAIL_PREFIXE, oRuleAgreementTable ))
{
vAddLinkIndex(COrganisationMemberView.MEMBER_PREFIXE, PROFILE_INDEX_FIELD, DETAIL_PREFIXE, PROFILE_INDEX_FIELD);
vAddLinkIndex(CMemberVoteView.RESULT_PREFIXE, VOTE_UNIT_IDENTIFIER, DETAIL_PREFIXE, VOTE_UNIT_IDENTIFIER);
}
public CMemberVoteView MemberVoteView
{
get
{
return (CMemberVoteView)this.GetMasterView;
}
}
public CComparisonAgreementTable AgreementTable
{
get
{
return (CComparisonAgreementTable)((CDbTableView)this.GetSlaveView).oGetTable;
}
}
/*
public int dSelect(SIndex oOrganisationIndex, P dEntity, out CVoteBase.SMemeCompare[] oMemeCompareArray)
{
this.bAddDisplayColumn(DETAIL_PREFIXE, PROFILE_INDEX_FIELD);
this.bAddDisplayColumn(DETAIL_PREFIXE, MEME_INDEX_FIELD);
this.bAddDisplayColumn(DETAIL_PREFIXE, MEME_REFERENCE_INDEX_FIELD);
this.bAddDisplayColumn(DETAIL_PREFIXE, COMPARATOR_CONDITION_FIELD);
this.bAddWhereOrganisation(COrganisationMemberView.MEMBER_PREFIXE, oOrganisationIndex);
return base.dSelect(oProfileIndex, COMPARATOR_FIELD + " in(" + CEntityManager.Instance().sGetChildList(CCommandFactoryBase.EXCLUSIVE_EXECUTIVE_RESTRICTION)
+ ")", dMemeList, out oMemeCompareArray);
}
else
{
return AgreementTable.dSelect(oProfileIndex, AgreementTable.sFieldEqual(COMPARATOR_FIELD, dComparatorType), dMemeList, out
oMemeCompareArray);
}
}
* */
/*
* public string sqlIsIndex(SIndex oProfileIndex, SIndex oMeme)
{
return sFieldEqual(PROFILE_INDEX_FIELD, oProfileIndex.dIndex) + AND + sFieldEqual(MEME_INDEX_FIELD, oMeme.dIndex);
}
protected int dSelect(SIndex oProfileIndex, string sComplementWhere, SIndex[] oMemeList, out CVoteBase.SMemeCompare[] oMemeCompareArray)
{
string sWhere = oProfileIndex.dIndex.ToString() + " in(" + ToString(ToIndex(oMemeList)) + ") ";
if (sComplementWhere != null)
{
sWhere += AND + sComplementWhere;
}
ArrayList oOutputArray;
ec dRC = base.dGetSelect(sWhere,
out oOutputArray, MEME_PREFERED_INDEX_FIELD, MEME_LESS_PREFERED_INDEX_FIELD);
oMemeCompareArray = CVoteBase.ToMemeCompareArray(oOutputArray);
return dRC;
}
* */
/*
*/
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for Class1.
///
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CVotingFactoryBase : CVoteBase
{
public CVotingFactoryBase(SVoteRight[] oVoteRightArray, int[] oMemeIndexArray, string sDatabaseName)
{
m_sDatabaseName = sDatabaseName;
m_oVoteRightArray = oVoteRightArray;
m_oMemeIndexArray = oMemeIndexArray;
m_oVoteResultSortedList = new SortedList();
}
string m_sDatabaseName;
protected SVoteRight[] m_oVoteRightArray;
int[] m_oMemeIndexArray;
SortedList m_oVoteResultSortedList;
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for Class1.
///
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CVoteRegisterTable : CDbSTable
{
public CVoteRegisterTable(string sDatabaseName)
: base(VOTE_UNIT_IDENTIFIER_TABLE, sDatabaseName)
{
vAddColumn(ORGANISATION_INDEX_FIELD, INTEGER_TYPE, true);
vAddColumn(VOTE_UNIT_IDENTIFIER, INTEGER_TYPE, true);
vAddColumn(ORGANISATION_SUB_INDEX_FIELD, INTEGER_TYPE, false);
vAddColumn(MEME_ADDRESS_FIELD, STRING_TYPE, false);
}
public const string VOTE_UNIT_IDENTIFIER_TABLE = "VoteUnitIdentifierTable";
public override ec dCreateIndex()
{
base.dCreateIndexMultipleField(2, MEME_ADDRESS_FIELD);
return base.dCreatePrimaryIndex();
}
public int dGetNextVoteIdentifier(SIndex oOrganisationIndex)
{
return dGetNext(VOTE_UNIT_IDENTIFIER, sFieldEqual(ORGANISATION_INDEX_FIELD, oOrganisationIndex.dIndex));
}
public int dGetVoteIdentifierOfProperty(SIndex oOrganisationIndex, CEntityArray oEntityArray)
{
int dVoteIdentifier = GetInteger(VOTE_UNIT_IDENTIFIER, sFieldEqual(ORGANISATION_INDEX_FIELD, oOrganisationIndex.dIndex)
+ AND + sFieldEqual(MEME_ADDRESS_FIELD, oEntityArray.ToString() ));
/* if (IsNotUsed(dPropertyValue))
{
return CCommandFactoryBase.dGetDefaultValueOfProperty(dPropertyType);
}*/
return dVoteIdentifier;
}
public ec dRegisterVote(SIndex oOrganisationIndex, CEntityArray oEntityArray)
{
ec dRC = ec.ST_SUCCEED;
int dVoteIntifier= dGetVoteIdentifierOfProperty(oOrganisationIndex, oEntityArray );
if (IsNotUsed(dVoteIntifier))
{
vAddValue(oOrganisationIndex.dIndex);
vAddValue(dGetNextVoteIdentifier(oOrganisationIndex));
vAddValue(oOrganisationIndex.dSubIndex);
vAddValue(oEntityArray.ToString());
dRC = dInsertIntoTable();
}
return dRC;
}
}
///----------------------------------------------------------------------------------------------------------------------------------------------
public class CVoteRegisterView : CDbJoinView
{
public CVoteRegisterView(P dLanguage, string sDatabaseName)
: base(new CDbTableView(REGISTER_PREFIXE, new CVoteRegisterTable(sDatabaseName)),
new CDbTableView(RESULT_PREFIXE, new CVoteResultTable(sDatabaseName)))
{
m_dLanguage = dLanguage;
vAddLinkIndex(REGISTER_PREFIXE, ORGANISATION_INDEX_FIELD, RESULT_PREFIXE, ORGANISATION_INDEX_FIELD);
vAddLinkIndex(REGISTER_PREFIXE, VOTE_UNIT_IDENTIFIER, RESULT_PREFIXE, VOTE_UNIT_IDENTIFIER);
}
public const string REGISTER_PREFIXE = "reg";
P m_dLanguage;
public ec dGetSelectVoteRegister(SIndex oOrganisationIndex, int dEntityIndex, CIdentifier oIdentifier, bool bVotingPendingOnly,
out CVoteBase.SVoteRegister[] oRegisterArray)
{
ArrayList oArrayList;
base.bAddDisplayColumn(REGISTER_PREFIXE, ORGANISATION_SUB_INDEX_FIELD);
base.bAddDisplayColumn(REGISTER_PREFIXE, MEME_INDEX_FIELD);
base.bAddDisplayColumn(REGISTER_PREFIXE, VOTE_UNIT_IDENTIFIER);
base.bAddDisplayColumn(REGISTER_PREFIXE, MEME_ADDRESS_FIELD);
base.bAddDisplayColumn(RESULT_PREFIXE, ENTITY_INDEX_FIELD);
base.bAddWhereOrganisation(REGISTER_PREFIXE, oOrganisationIndex);
base.bAddWhere(REGISTER_PREFIXE, MEME_ADDRESS_FIELD, ENSQLRelation.eq, oIdentifier.Index.dIndex);
base.bAddWhere(REGISTER_PREFIXE, MEME_INDEX_FIELD, dEntityIndex);
if (bVotingPendingOnly)
{
base.bAddWhere(RESULT_PREFIXE, LAST_VOTE_CHANGE_DATE_FIELD, ENSQLRelation.sup, RESULT_PREFIXE, LAST_VOTE_DATE_FIELD);
base.bAddWhere(RESULT_PREFIXE, NEXT_VOTE_DATE_FIELD, ENSQLRelation.inf, DateTime.UtcNow.ToString());
}
ec dRC = base.dGetSelect(out oArrayList);
oRegisterArray = new CVoteBase.SVoteRegister[oArrayList.Count];
for (int i = 0; i < oArrayList.Count; i++)
{
object[] oObjs = (object[])oArrayList[i];
oRegisterArray[i].oOrganisationIndex.dIndex = oOrganisationIndex.dIndex;
oRegisterArray[i].oOrganisationIndex.dSubIndex = Convert.ToInt32(oObjs[0]);
oRegisterArray[i].dMemeIndex = Convert.ToInt32(oObjs[1]);
oRegisterArray[i].dVoteIdentifier = Convert.ToInt32(oObjs[2]);
dRC = CDbEntityManager.Instance(this.sDatabaseName,m_dLanguage).dConvert(oObjs[3].ToString(),
out oRegisterArray[i].oIdentifier);
oRegisterArray[i].dEntityIndex = Convert.ToInt32(oObjs[4]);
}
return dRC;
}
public ec dGetSelectVoteRule(SIndex oOrganisationIndex, int dRuleEntity, CIdentifier oIdentifier)
{
CVoteBase.SVoteRegister[] oRegisterArray;
oOrganisationIndex.dSubIndex = NOT_USED;
ec dRC = dGetSelectVoteRegister(oOrganisationIndex, dRuleEntity, oIdentifier,
false, out oRegisterArray);
return dRC;
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CVoteManager : CVoteBase
{
public CVoteManager(P dLanguage, string sDatabaseName)
{
m_dLanguage = dLanguage;
m_oPrincipleAgreementView = new CRuleAgreementView(new CComparisonAgreementTable("RuleAgreementTable", sDatabaseName), sDatabaseName);
m_oMemeAgreementView = new CRuleAgreementView(new CMemeSubComparisonAgreementTable("MemeAgreementTable", sDatabaseName), sDatabaseName);
m_oVoteRegisterView = new CVoteRegisterView(dLanguage, sDatabaseName);
m_oOrganisationMemberView = new COrganisationMemberView(sDatabaseName);
m_oIdentifierView = new CDbIdentifierView(dLanguage, sDatabaseName);
m_oProfileView = new CProfileView(dLanguage, sDatabaseName);
m_oOrganisationView = new COrganisationView(dLanguage, sDatabaseName);
}
P m_dLanguage;
CRuleAgreementView m_oPrincipleAgreementView, m_oMemeAgreementView;
CVoteRegisterView m_oVoteRegisterView;
COrganisationMemberView m_oOrganisationMemberView;
CProfileView m_oProfileView;
COrganisationView m_oOrganisationView;
protected CDbIdentifierView m_oIdentifierView;
public void vCleanAllData()
{
m_oOrganisationMemberView.vCleanAllData();
m_oPrincipleAgreementView.vCleanAllData();
m_oVoteRegisterView.vCleanAllData();
m_oIdentifierView.vCleanAllData();
m_oProfileView.vCleanAllData();
m_oMemeAgreementView.vCleanAllData();
m_oOrganisationView.vCleanAllData();
}
public void vRegister()
{
m_oIdentifierView.vRegister();
}
public ec dGetVoteRight(SIndex oOrganisationIndex, CIdentifier oSpeciality, out SVoteRight[] oVoteRight)
{
ec dRC = ec.ST_SUCCEED;
SIndex[] oProfileIndexArray;P[] dPositionArray; bool[] bGrantAccessArray;
m_oOrganisationMemberView.GetMemberTable.dGetMember(oOrganisationIndex,
out oProfileIndexArray, out dPositionArray, out bGrantAccessArray);
oVoteRight = new SVoteRight[oProfileIndexArray.Length];
for (int i = 0; i < oProfileIndexArray.Length; i++)
{
oVoteRight[i].dProfileIndex = oProfileIndexArray[i].dIndex;
oVoteRight[i].dVoteCoefficient = 1;
}
return dRC;
}
public CVoteRegisterTable VoteRegisterTable
{
get
{
return (CVoteRegisterTable)(((CDbTableView)m_oVoteRegisterView.GetMasterView).oGetTable);
}
}
public ec dAddOpinion(CCommandLine oCommandLine, CIdentifier oMainAttribute, CIdentifier oOItherIdentification2 , out string
sOutputText)
{
sOutputText = null;
ec dRC = ec.ST_SUCCEED;
SIndex m_oCriteriaMemeIndex= NOT_USED_SINDEX;
SIndex m_oMemeReference, m_oMainMeme; m_oMemeReference = m_oMainMeme = NULL_SINDEX;
CIdentifier oCriteriaPrincipleId = oCommandLine.idFind(P.PRINCIPLE);
if (oCriteriaPrincipleId != null)
{
SIndex[] dIdentifierIndexArray;
dRC = m_oIdentifierView.dGet(MAX_MEME_IDENTIFIER_RETURN_COUNT, true, oCriteriaPrincipleId, out dIdentifierIndexArray);
if (dIdentifierIndexArray.Length >= 1)
{
m_oCriteriaMemeIndex = dIdentifierIndexArray[0];
}
} CMemeArray oMemeArray; int dCount;
//dRC = m_oIdentifierView.dGet(MAX_MEME_IDENTIFIER_RETURN_COUNT, true, oMainAttribute, out dIdentifierIndexArray3);
dRC = m_oProfileView.dGetMeme(oCommandLine, oMainAttribute, out oMemeArray, out dCount);
if (oMemeArray.Length >= 1)
{
m_oMainMeme = oMemeArray[0].m_iMemeIndex;
}
else
{
return ec.ST_ATTRIBUTE_SUPPORT_MEME_DOES_NOT_EXIST;
}
/*CIdentifier oOItherIdentification2 = oCommandLine.idFind(P.TO);
if ( oOItherIdentification2 != null)
{
oOItherIdentification2 = oCommandLine.idFind(P.AGAINST);
}*/
if (oOItherIdentification2 != null)
{
SIndex[] dIdentifierIndexArray2;
dRC = m_oIdentifierView.dGet(MAX_MEME_IDENTIFIER_RETURN_COUNT, true, oOItherIdentification2, out dIdentifierIndexArray2);
if (dIdentifierIndexArray2.Length >= 1)
{
m_oMemeReference = dIdentifierIndexArray2[0];
}
}
dRC = dAddOpinion( oCommandLine, m_oMainMeme, m_oMemeReference, m_oCriteriaMemeIndex);
/*
//ec dRC = ec.ST_SUCCEED;
if (oCommandLine.Command == P.SUPPORT)
{
dRC = m_oMemeAgreementView.AgreementTable.dAdd(oCommandLine.SenderIndex, m_oMainMeme, m_oMemeReference,
oCommandLine.pFind(P.COMPARATOR),
m_oCriteriaMemeIndex.dIndex, oCommandLine.sFind(P.COMMENT));
}
else if (oCommandLine.Command == P.OPPOSE)
{
dRC = m_oMemeAgreementView.AgreementTable.dAdd(oCommandLine.SenderIndex, m_oMemeReference, m_oMainMeme,
oCommandLine.pFind(P.COMPARATOR),
m_oCriteriaMemeIndex.dIndex, oCommandLine.sFind(P.COMMENT));
}
else
{
dRC = ec.ST_COMMAND_NOT_SUPPORTED_FOR_THIS_ENTITY;
}
*/
return dRC;
}
public ec dAddOpinion( CCommandLine oCommandLine, SIndex oMainMeme, SIndex oAgainstMain, SIndex oCriteriaMemeIndex)
{
ec dErrorCode = ec.ST_COMMAND_NOT_SUPPORTED_FOR_THIS_ENTITY;
CIdentifier oCriteriaPrincipleId = oCommandLine.idFind(P.PRINCIPLE);
if (IsNotUsed(oMainMeme) || IsNotUsed(oAgainstMain))
{
return ec.ST_OPINION_UNDEFINED_MEME;
}
if ( oMainMeme.dIndex == oAgainstMain.dIndex)
{
if (oCommandLine.Command == P.SUPPORT)
{
dErrorCode = m_oMemeAgreementView.AgreementTable.dAdd(oCommandLine.SenderIndex, oCommandLine.ContentIndex, oCommandLine.iFind(P.AGAINST),
oCommandLine.pFind(P.COMPARATOR),
oCriteriaMemeIndex.dIndex, oCommandLine.sFind(P.COMMENT));
}
else if (oCommandLine.Command == P.OPPOSE)
{
dErrorCode = m_oMemeAgreementView.AgreementTable.dAdd(oCommandLine.SenderIndex, oCommandLine.iFind(P.AGAINST), oCommandLine.ContentIndex,
oCommandLine.pFind(P.COMPARATOR),
oCriteriaMemeIndex.dIndex, oCommandLine.sFind(P.COMMENT));
}
}
else
{
if (oCommandLine.Command == P.SUPPORT)
{
dErrorCode = m_oPrincipleAgreementView.AgreementTable.dAdd(oCommandLine.SenderIndex, oCommandLine.ContentIndex, oCommandLine.iFind(P.AGAINST),
oCommandLine.pFind(P.COMPARATOR),
oCriteriaMemeIndex.dIndex, oCommandLine.sFind(P.COMMENT));
}
else if (oCommandLine.Command == P.OPPOSE)
{
dErrorCode = m_oPrincipleAgreementView.AgreementTable.dAdd(oCommandLine.SenderIndex, oCommandLine.iFind(P.AGAINST),
oCommandLine.ContentIndex,
oCommandLine.pFind(P.COMPARATOR),
oCriteriaMemeIndex.dIndex, oCommandLine.sFind(P.COMMENT));
}
}
return dErrorCode;
}
public ec dAddOpinion(CCommandLine oCommandLine, SIndex iRuleMemeIndex, bool bSupport, out string sOutputText)
{
sOutputText = null;
CIdentifier oCriteriaPrincipleId = oCommandLine.idFind(P.PRINCIPLE);
//ec dRC = ec.ST_SUCCEED;
ec dRC = m_oPrincipleAgreementView.AgreementTable.dAdd(oCommandLine.SenderIndex, iRuleMemeIndex, oCommandLine.pFind(P.COMPARATOR),
bSupport,
oCriteriaPrincipleId.Index.dIndex, oCommandLine.sFind(P.COMMENT));
return dRC;
}
public ec dVoteCountReport(CCommandLine oCommandLine, CIdentifier oIdentifierAdress, out string sOutputText)
{
SIndex[] oMemeClassement; CRankVoting.SBottomCount[] oIndexMemeRankList; SIndex[] dIdentifierIndexArray;
CTraceReport oTraceReport = new CTraceReport();
ec dRC = dVoteCount(oCommandLine, oIdentifierAdress,ref oTraceReport, out dIdentifierIndexArray,out oIndexMemeRankList,
out oMemeClassement);
if (dRC == ec.ST_SUCCEED)
{
if (oIndexMemeRankList == null || oIndexMemeRankList.Length == 0)
{
sOutputText = "There is no results";
dRC = ec.ST_VOTE_EMPTY_RESULTS;
}
else
{
CMemeArray oMemeArray; int dCount;
dRC = m_oProfileView.dGetMeme(oCommandLine, oIdentifierAdress, out oMemeArray, out dCount);
dRC = oMemeArray.dExtract(oMemeClassement, out oMemeArray);
if (dRC != ec.ST_SUCCEED)
{
CListReport oReport = new CListReport(3);
// oReport.Active = true;
oReport.vSetTitle("Vote Result");
oReport.vSetHeader("Rank", "Meme_Index", "Neg_Count");
for (int i = oIndexMemeRankList.Length - 1; i >= 0; i--)
{
SIndex oIndex = dGetSIndex(dIdentifierIndexArray, oIndexMemeRankList[i].dMemeIndex);
oReport.vAdd(oIndexMemeRankList.Length - i, dGetSIndex(dIdentifierIndexArray, oIndexMemeRankList[i].dMemeIndex), oIndexMemeRankList[i].dCount);
}
sOutputText = oReport.sText;
sOutputText += oTraceReport.sText;
}
else
{
SMemeDisplay[] oContentArray;
m_oOrganisationView.vGetMemeContent(oCommandLine.SenderIndex.dIndex, oMemeArray, out oContentArray);
CListReport oReport = new CListReport(5);
//oReport.Active = true;
oReport.vSetTitle("Vote Result");
oReport.vSetHeader("Rank", "Identifier", "Content", "Author", "Neg_Count");
for (int i = 0; i < oContentArray.Length; i++ )
{
oReport.vAdd(i + 1, oContentArray[i].sAddress, oContentArray[i].sContent, oContentArray[i].sAuthorName, oIndexMemeRankList[i].dCount);
}
sOutputText = oReport.sText;
sOutputText += oTraceReport.sText;
}
}
}
else
{
sOutputText = " The vote count got get " + dRC + "\n";
}
if (oCommandLine.bHasOption(P.TRACE))
{
sOutputText += oTraceReport.sText;
}
return dRC;
}
public ec dVoteCount(CCommandLine oCommandLine, CIdentifier oIdentifierAdress, ref CTraceReport oTraceReport,
out SIndex[] dIdentifierIndexArray, out CRankVoting.SBottomCount[] oIndexMemeRankList, out SIndex[] oMemeClassement)
{
SVoteRight[] oVoteRight;
oMemeClassement = null; oIndexMemeRankList = null;
// CIdentifier oIdentifierAdress= oCommandLine.idFind(P.IDENTIFIER);
ec dRC = m_oIdentifierView.dGet(MAX_MEME_IDENTIFIER_RETURN_COUNT, true, oIdentifierAdress, out dIdentifierIndexArray);
if (dIdentifierIndexArray.Length == 0)
{
return ec.ST_VOTE_NO_OBJECT_TO_SELECT_BY_VOTE;
}
dRC = dGetVoteRight(oCommandLine.OrganisationIndex, oIdentifierAdress.oGetRoot(P.SPECIALITY_CLASS), out oVoteRight);
if (dRC== ec.ST_SUCCEED)
{
//if (oIdentifierAdress.bIsA(P.PRINCIPLE))
//{
Debug.WriteLine("m_oMemeAgreementView.AgreementTable = " + m_oMemeAgreementView.AgreementTable.csDumpTable());
CRankVoting oRankVoting = new CRankVoting(oVoteRight);
for(int i=0; i < oVoteRight.Length;i++)
{
SMemeCompare[] oMemeCompareArray;
if ((dIdentifierIndexArray.Length == 1 )) {
m_oMemeAgreementView.AgreementTable.dSelect(oVoteRight[i].dProfileIndex, dIdentifierIndexArray, out oMemeCompareArray);
}
else {
m_oPrincipleAgreementView.AgreementTable.dSelect(oVoteRight[i].dProfileIndex,
dIdentifierIndexArray, out oMemeCompareArray);
}
oRankVoting.vAdd(oVoteRight[i].dProfileIndex, oMemeCompareArray);
}
oTraceReport.Active = oCommandLine.bHasOption(P.TRACE);
oTraceReport.dLoadProfile(ToArrayList(oVoteRight));
oRankVoting.vVote(out oIndexMemeRankList, ref oTraceReport);
if (oCommandLine.bHasOption(P.ENCRYPT) )
{
oTraceReport.dReplaceProfileIndexByRamdomIndex();
}
if (oIndexMemeRankList == null || oIndexMemeRankList.Length == 0)
{
oMemeClassement = null;
dRC = ec.ST_VOTE_EMPTY_RESULTS;
}
else
{
oMemeClassement = new SIndex[oIndexMemeRankList.Length];
for (int i = oIndexMemeRankList.Length - 1; i >= 0; i--)
{
oMemeClassement[oIndexMemeRankList.Length - i - 1] = dGetSIndex(dIdentifierIndexArray, oIndexMemeRankList[i].dMemeIndex);
}
}
// }
}
return dRC;
}
private SIndex dGetSIndex(SIndex[] dIdentifierIndexArray, int dMemeIndex)
{
SIndex oIndex;
if ((dIdentifierIndexArray.Length == 1))
{
oIndex.dIndex = dIdentifierIndexArray[0].dIndex;
oIndex.dSubIndex = dMemeIndex;
}
else
{
oIndex.dIndex = dMemeIndex;
oIndex.dSubIndex = NOT_USED;
}
return oIndex;
}
}
///---------------------------------------------------------------------------------------------------------------------------------------------------
public class CVoteMemeView : CVoteView
{
public CVoteMemeView(P dLanguage, string sViewName, string sDatabaseName)
: base(sViewName, sDatabaseName)
{
m_dLanguage = dLanguage;
}
public ec dVote(SIndex oOrganisationIndex, P dVoteIdentifier, CVoteBase.SVoteRight[] oVoteRight, TimeSpan oNextElectionSpan,
CVoteBase.SMemeCompare[] oBallotArray, out CRankVoting.SBottomCount[] oIndexMemeRankList, ref CTraceReport oTraceReport)
{
CRankVoting oGradeRankVoting = new CRankVoting( oVoteRight);
oGradeRankVoting.vAdd(oBallotArray);
oGradeRankVoting.vVote(out oIndexMemeRankList, ref oTraceReport);
ec dRC = VoteResultTable.dSetResult(oOrganisationIndex, dVoteIdentifier, oIndexMemeRankList.Length > 0 ? oIndexMemeRankList[0].dMemeIndex
: NOT_USED,
oNextElectionSpan, GetSerializedValue(oIndexMemeRankList));
return dRC;
}
P m_dLanguage;
public ec dGetSelectBallot(SIndex oOrganisationIndex, int dVoteIdentifier, out CVoteBase.SVoteGrade[] oBallotArray)
{
string sWhere = VoteResultTable.sqlIsOrganisation(oOrganisationIndex);
sWhere += AND + VoteDetailTable.sFieldEqual(VOTE_UNIT_IDENTIFIER, dVoteIdentifier);
ArrayList oArrayList;
ec dRC = VoteDetailTable.dGetSelect(sWhere, out oArrayList, PROFILE_INDEX_FIELD, SUPPORT_FIELD, MEME_INDEX_FIELD);
oBallotArray = new CVoteBase.SVoteGrade[oArrayList.Count];
if (dRC != ec.ST_SUCCEED)
{
for (int i = 0; i < oArrayList.Count; i++)
{
object[] oVote = (object[])oArrayList[i];
oBallotArray[i].dProfileIndexIndex = Convert.ToInt32(oVote[0]);
oBallotArray[i].dGrade = Convert.ToInt32(oVote[1]);
oBallotArray[i].dMemeIndex = Convert.ToInt32(oVote[2]);
}
}
return dRC;
}
}
}
///----------------------------------------------------------------------------------------------------------------------------------------------
/*public class CAgreementWithComparatorTable : CAgreementTable
{
public CAgreementWithComparatorTable(string sTableName, string sDatabaseName)
: base(sTableName, sDatabaseName)
{
vAddColumn(COMPARATOR_FIELD, INTEGER_TYPE, false);
}
public const string COMPARATOR_FIELD = "[Comparator]";
public int dSelect(SIndex oProfileIndex, int dComparatorType, SIndex[] dMemeList, out CVoteBase.SMemeCompare[] oMemeCompareArray)
{
if (CEntityManager.Instance().bIsA(dComparatorType, EXCLUSIVE_EXECUTIVE_RESTRICTION))
{
return dSelect(oProfileIndex, COMPARATOR_FIELD + " in(" + CEntityManager.Instance().sGetChildList(EXCLUSIVE_EXECUTIVE_RESTRICTION)
+ ')', dMemeList, out oMemeCompareArray);
}
else
{
return dSelect(oProfileIndex, sFieldEqual(COMPARATOR_FIELD, dComparatorType), dMemeList, out oMemeCompareArray);
}
}
}
public class CAgreementWithPrincipleTable : CAgreementTable
{
public CAgreementWithPrincipleTable(string sTableName, string sDatabaseName)
: base(sTableName, sDatabaseName)
{
vAddColumn(PRINCIPLE_FIELD, ENTITY_TYPE, true);
}
public const string PRINCIPLE_FIELD = "[Principle]";
public int dSelect(SIndex oProfileIndex, int dPrincipeType, SIndex[] dMemeList, out CVoteBase.SMemeCompare[] oMemeCompareArray)
{
return dSelect(oProfileIndex, sFieldEqual(PRINCIPLE_FIELD, dPrincipeType), dMemeList, out oMemeCompareArray);
}
}
*/
/*
///---------------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for Class1.
///
//----------------------------------------------------------------------------------------------------------------------------------------------
///
/// Summary description for GroupDbTable.
///
//----------------------------------------------------------------------------------------------------------------------------------------------
///
public class CObjectDbView : CVoteBooleanView
{
public CObjectDbView(string sDatabaseName)
: base("ObjectOfOrganisation", sDatabaseName)
{
this.vAddKeyOrganisation();
VoteResultTable.vAddColumn(sColumnName, INTEGER_TYPE, true);
this.vAddKeyColumn(IDENTIFIER_INDEX, INTEGER_TYPE);
VoteResultTable.vAddColumn(IDENTIFIER_SUB_INDEX, INTEGER_TYPE, false);
}
public string sGetIdentifierKey(int dIdentifierIndex)
{
return this.VoteResultTable.sFieldEqual(IDENTIFIER_INDEX, dIdentifierIndex);
}
}
*/
|