This commit is contained in:
2014-11-17 00:24:51 +01:00
commit 05390b4bdd
26 changed files with 14585 additions and 0 deletions

194
CobXmlSupport/IndexState.cs Normal file
View File

@ -0,0 +1,194 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CobXmlSupport
{
public class IndexState
{
private char[] splitChars={'#'};
private string latestStr;
private string wrkString;
private string wrkSectStr;
private string wrkVarStr;
private Dictionary<string, string> indexes;
private List<CobRow> rows;
private bool inOut;
private string extraParam;
public Dictionary<string, string> Indexes
{
get { return indexes; }
//set { indexes = value; }
}
public string ExtraParam
{
// private variable to use from method which need temporary extra
// method using it responsible for cleaning it
get { return extraParam; }
}
public IndexState(Dictionary<string, string> varIndex, List<CobRow> xrows, bool bin=true)
{
latestStr = "";
indexes = varIndex;
wrkSectStr = "";
wrkVarStr = "";
rows = xrows;
inOut = bin; // "IN" == true "OUT" == false
}
public string ProcStr
{
get
{
string repInfoStr = "\r\n * ==================== 88 - variabler =============* ";
repInfoStr += wrkVarStr;
repInfoStr += "\r\n * ==================== 88 - variabler =============* \r\n";
repInfoStr += wrkSectStr;
return repInfoStr;
}
}
public string PresentStrings(string indexlist) {
string codeString="";
wrkString = indexlist;
if(!latestStr.Equals(wrkString)){
codeString=analyseDiff();
}
return codeString;
}
private string analyseDiff()
{
string genCode = "";
string[] latestList=latestStr.Split(splitChars),
wrkList=wrkString.Split(splitChars);
if (latestList.Length > 0)
{
for(int i=latestList.Length-1;i>-1;i--){
if (!wrkList.Contains(latestList[i]) && latestList[i].Length>0)
{
genCode+="\r\n END-PERFORM";
}
}
}
if (wrkList.Length > 0)
{
for(int i=wrkList.Length-1;i>-1;i--){
if(!latestList.Contains(wrkList[i])){
string countVar = "";
string tagName = "";
if (!wrkList[i].Equals(""))
{
string chosenKey = indexes.FirstOrDefault(x => x.Value == wrkList[i]).Key; // indexes = <FieldName , FieldIndex> search FieldName from present FieldIndex
countVar = rows.First(x => x.FieldName == chosenKey).CountIn; // from cobrows find "Count In"-variable for given FieldName
tagName = rows.First(x => x.FieldName == chosenKey).TagName; // from cobrows find "xmltag" for given FieldName
string inLst = "";
int j = i + 1;
//genCode += "\r\n *>" + wrkString;
if (inOut) // When moving to cobol xml structure
{
genCode += "\r\n MOVE "+ S.ettingMaxOcc + " TO " + countVar;
// genCode += "\r\n MOVE 0 TO " + countVar;
while (wrkList.Length > j)
{
if (inLst.Length == 0)
{
inLst = "\r\n " + wrkList[j];
}
else
{
inLst = "\r\n " + wrkList[j] +"," +inLst;
}
j++;
}
if (inLst.Length > 0)
{
genCode += "\r\n ( " + inLst + " )";
}
inLst = "";
}
genCode += "\r\n PERFORM VARYING " + wrkList[i] + " FROM 1 BY 1";
//genCode += "\r\n UNTIL EXIT ";
//genCode += "\r\n UNTIL " + wrkList[i] + " > " + countVar;
genCode += "\r\n UNTIL " + wrkList[i] + " > ";
extraParam = countVar;
j = i + 1;
while (wrkList.Length > j)
{
if (inLst.Length == 0)
{
inLst = "\r\n " + wrkList[j];
}
else
{
inLst = "\r\n " + wrkList[j] + "," + inLst;
}
j++;
}
if (inLst.Length > 0)
{
extraParam += "\r\n ( " + inLst + " )";
}
genCode += extraParam;
if (inOut)
{
string tmpCheckVar="";
genCode += "\r\n PERFORM " + createReferenceSections(tagName,"NXT-",out tmpCheckVar);
genCode += "\r\n IF " + tmpCheckVar;
genCode += "\r\n SUBTRACT 1 FROM " + wrkList[i];
genCode += "\r\n MOVE " + wrkList[i] + " TO " + countVar;
if (inLst.Length > 0)
{
genCode += "\r\n ( " + inLst + " )";
}
genCode += "\r\n EXIT PERFORM";
genCode += "\r\n END-IF";
}
}
}
}
}
latestStr = wrkString;
return genCode;
}
private string createReferenceSections(string tagName, string procPrefix,out string missIdent)
{
missIdent=tagName.Replace("\"","").Replace(":","");
string tmpProcName = procPrefix + missIdent;
if(!wrkSectStr.Contains(tmpProcName)){
wrkSectStr += "\r\n *>-------------------- READ SECTION ---------------*" + tmpProcName;
wrkSectStr += "\r\n * Den här sektionen används för att positionera ";
wrkSectStr += "\r\n * datat när den genererade xml-proceduren körs";
wrkSectStr += "\r\n *--------------------- READ SECTION ---------------*\r\n";
wrkSectStr += "\r\n " + tmpProcName + " SECTION.";
wrkSectStr += "\r\n * READ NEXT" + tagName;
wrkSectStr += "\r\n IF POST-SAKNAS";
wrkSectStr += "\r\n SET " + "NO-"+missIdent + " TO TRUE";
wrkSectStr += "\r\n END-IF";
wrkSectStr += "\r\n .";
wrkSectStr += "\r\n "+tmpProcName+"-EX.";
wrkSectStr += "\r\n EXIT.\r\n";
wrkVarStr += "\r\n 01 "+missIdent+"-X PIC X VALUE SPACE.";
wrkVarStr += "\r\n 88 " + "NO-" + missIdent + " VALUE \"X\".";
wrkVarStr += "\r\n 88 " + missIdent + "-OK VALUE SPACE.";
missIdent = "NO-" + missIdent;
}
return tmpProcName;
}
}
}