diff --git a/src/vpkDependencyResolver.Mod b/src/vpkDependencyResolver.Mod deleted file mode 100644 index 6fa9939..0000000 --- a/src/vpkDependencyResolver.Mod +++ /dev/null @@ -1,116 +0,0 @@ -MODULE vpkDependencyResolver; -IMPORT vpkJsonParser, vpkSettings, vpkPackageResolver, Strings, vpkLogger; - -CONST ArrayMaxNumber = 30; - -VAR - moduleNames: ARRAY ArrayMaxNumber OF vpkJsonParser.TString; - moduleJson: ARRAY ArrayMaxNumber OF vpkJsonParser.TString; - moduleVersions: ARRAY ArrayMaxNumber OF vpkJsonParser.TString; - - j : LONGINT; - -PROCEDURE ResolveVersionFiles *(jsonString: ARRAY OF CHAR); -VAR - jsonRecord, dependencies: vpkJsonParser.JsonTypePointer; - keyFound: BOOLEAN; - packageName, version, filePath: ARRAY 32 OF CHAR; - returnedJSON: vpkJsonParser.TString; - keys: ARRAY ArrayMaxNumber OF vpkJsonParser.TString; - i, k : LONGINT; -BEGIN - jsonRecord := vpkJsonParser.Create(jsonString); - keyFound := jsonRecord.GetTerminal(jsonRecord, "Package", packageName); - IF keyFound THEN - vpkLogger.Log("Parsing package by name"); - vpkLogger.Log(packageName); - vpkLogger.Log("------------------------"); - ELSE vpkLogger.Log("Value for the Key is not found"); RETURN; END; - - dependencies := jsonRecord.GetNonTerminal(jsonRecord, "Dependencies"); - - IF dependencies = NIL THEN - vpkLogger.Log("Parsing package by name"); - vpkLogger.Log(packageName); - vpkLogger.Log("Error"); - vpkLogger.Log("No dependency"); - vpkLogger.Log("------------------------"); - END; - - dependencies.GetTerminalKeys(dependencies, keys); - - FOR i := 0 TO dependencies.TerminalNumber - 1 DO (* TODO: rewrite with working getter everywhere*) - keyFound := dependencies.GetTerminal(dependencies, keys[i], version); - - IF ~keyFound THEN vpkLogger.Log('ERROR while searching key'); vpkLogger.Log(keys[i]); END; - ASSERT(keyFound); - - COPY("", filePath); - Strings.Append("/", filePath); - Strings.Append(keys[i], filePath); - Strings.Append("/", filePath); - Strings.Append(version, filePath); - Strings.Append("/", filePath); - Strings.Append(vpkSettings.packageFileName, filePath); - - vpkJsonParser.Empty(returnedJSON); - - vpkPackageResolver.ResolveFile( - vpkSettings.host, - vpkSettings.port, - filePath, - keys[i], - vpkSettings.packageFileName, - returnedJSON - ); - - keyFound := FALSE; - IF j >= LEN(moduleNames) THEN - vpkLogger.Log("Out of range in ResolveVersionFiles function in ..."); - END; - ASSERT(j < LEN(moduleNames)); - - FOR k := 0 TO j - 1 DO - IF Strings.Match(moduleNames[k], keys[i]) THEN - keyFound := TRUE; - END; - END; - - - IF ~keyFound THEN - COPY(keys[i], moduleNames[j]); - COPY(version, moduleVersions[j]); - COPY(returnedJSON, moduleJson[j]); - INC(j); - ResolveVersionFiles(returnedJSON); - END; - END; -END ResolveVersionFiles; - -PROCEDURE ResolvePackages*(); -VAR - i: LONGINT; - keyFound: BOOLEAN; - jsonRecord, filesRecord: vpkJsonParser.JsonTypePointer; - values: ARRAY 10 OF vpkJsonParser.TString; - host, port, path, packageName, version: ARRAY 50 OF CHAR; -BEGIN - FOR i := 0 TO j - 1 DO - jsonRecord := vpkJsonParser.Create(moduleJson[i]); - filesRecord := jsonRecord.GetNonTerminal(jsonRecord, "Files"); - - IF filesRecord = NIL THEN - vpkLogger.Log("Error: no files section found"); - END; - - ASSERT(filesRecord # NIL); - keyFound := jsonRecord.GetTerminal(jsonRecord, "Remote", host); - keyFound := jsonRecord.GetTerminal(jsonRecord, "Port", port); - keyFound := jsonRecord.GetTerminal(jsonRecord, "Path", path); - keyFound := jsonRecord.GetTerminal(jsonRecord, "Package", packageName); - keyFound := jsonRecord.GetTerminal(jsonRecord, "Version", version); - vpkPackageResolver.Resolve(host, port, path, packageName, version, filesRecord.TerminalValues); (* TODO: filesRecord.TerminalValues create working getter for this*) - END; -END ResolvePackages; - -END vpkDependencyResolver. diff --git a/src/vpkInstaller_old.Mod b/src/vpkInstaller_old.Mod deleted file mode 100644 index ae89fe4..0000000 --- a/src/vpkInstaller_old.Mod +++ /dev/null @@ -1,34 +0,0 @@ -MODULE vpkInstaller; -IMPORT - vpkJsonParser, - vpkFileManager, - vpkHttp, - vpkLogger, - vpkDependencyResolver, - vpkSettings; -CONST - MAXARRAYNUMBER = 1000; -PROCEDURE install*; -VAR - jsonData: ARRAY MAXARRAYNUMBER OF CHAR; - success: BOOLEAN; -BEGIN - vpkLogger.Log("Starting install process"); - success := vpkFileManager.fileToString(vpkSettings.packageFileName, jsonData); - - IF ~success THEN vpkLogger.Log("Some ERROR occured while reading VERSIONFILE") END; - ASSERT(success); - - vpkLogger.Log("Starting resolving dependencies"); - - vpkDependencyResolver.ResolveVersionFiles(jsonData); - vpkDependencyResolver.ResolvePackages(); - vpkLogger.Log("======================"); - vpkLogger.Log("======================"); - vpkLogger.Log("Installation complete"); - vpkLogger.Log("Thanks for using OPIUM!"); -END install; - -BEGIN - -END vpkInstaller. diff --git a/src/vpkJsonParser.Mod b/src/vpkJsonParser.Mod deleted file mode 100644 index ac18898..0000000 --- a/src/vpkJsonParser.Mod +++ /dev/null @@ -1,289 +0,0 @@ -MODULE vpkJsonParser; -IMPORT vpkLogger, vpkCharacterStack, Strings, strUtils, vpkSettings, StringList; -CONST - ArrayMaxNumber = 30; - ArrayMaxNumberChar = 2000; - (* Const *) - symbolBracketStart = "{"; - symbolBracketEnd = "}"; - (* TODO: Reverse " and ' *) - quote = '"'; - coma = ","; -TYPE - TString* = ARRAY ArrayMaxNumberChar OF CHAR; - - JsonTypePointer* = POINTER TO JsonType; - - JsonType* = RECORD - GetTerminal* : PROCEDURE(self : JsonTypePointer; string : ARRAY OF CHAR; VAR returnValue : ARRAY OF CHAR): BOOLEAN; - GetNonTerminal* : PROCEDURE(self : JsonTypePointer; key : ARRAY OF CHAR): JsonTypePointer; - HasKey* : PROCEDURE(self : JsonTypePointer; key : ARRAY OF CHAR): BOOLEAN; - TypeOfTheKey* : PROCEDURE(self : JsonTypePointer; key : ARRAY OF CHAR; VAR returnValue : ARRAY OF CHAR); - GetTerminalKeys* : PROCEDURE(self : JsonTypePointer; VAR destination : StringList.TStringList); - GetTerminalValues* : PROCEDURE(self : JsonTypePointer; VAR destination : StringList.TStringList); - GetNoneTerminalKeys* : PROCEDURE(self : JsonTypePointer; VAR destination : ARRAY OF TString); - GetTerminalNumber* : PROCEDURE(self : JsonTypePointer): LONGINT; - GetNonTerminalNumber* : PROCEDURE(self : JsonTypePointer): LONGINT; - - TerminalKeys : ARRAY ArrayMaxNumber OF TString; - TerminalValues* : ARRAY ArrayMaxNumber OF TString; - TerminalNumber* : LONGINT; - - NonTerminalKeys : ARRAY ArrayMaxNumber OF TString; - NonTerminalValues : POINTER TO ARRAY OF JsonTypePointer; - NonTerminalNumber* : LONGINT; - END; - -VAR - jsonRecord: JsonTypePointer; - testValue: ARRAY ArrayMaxNumber OF CHAR; - keyFound: BOOLEAN; - -PROCEDURE GetTerminalNumber*(self : JsonTypePointer): LONGINT; -BEGIN RETURN self.TerminalNumber END GetTerminalNumber; - -PROCEDURE GetNonTerminalNumber*(self : JsonTypePointer): LONGINT; -BEGIN RETURN self.NonTerminalNumber END GetNonTerminalNumber; - -PROCEDURE GetNonTerminal(self : JsonTypePointer; key : ARRAY OF CHAR): JsonTypePointer; -VAR - i: LONGINT; -BEGIN - FOR i := 0 TO self.NonTerminalNumber - 1 DO - IF Strings.Match(key, self.NonTerminalKeys[i]) THEN RETURN self.NonTerminalValues[i] END; - END; - - RETURN NIL; -END GetNonTerminal; - -PROCEDURE Empty *(VAR string: ARRAY OF CHAR); -VAR - i : LONGINT; -BEGIN - FOR i := 0 TO LEN(string) - 1 DO string[i] := 0X END; - COPY("", string); -END Empty; - -PROCEDURE GetTerminal *(self: JsonTypePointer; key: ARRAY OF CHAR; VAR returnValue: ARRAY OF CHAR): BOOLEAN; -VAR - i: LONGINT; - noneTerminal: JsonTypePointer; - strings: strUtils.pstrings; - parent, children: ARRAY ArrayMaxNumber OF CHAR; -BEGIN - - FOR i := 0 TO self.TerminalNumber DO - IF Strings.Match(key, self.TerminalKeys[i]) THEN COPY(self.TerminalValues[i], returnValue); RETURN TRUE END; - END; - - strings := strUtils.tokenize(key, '.'); - - IF LEN(strings^) < 1 THEN RETURN FALSE END; - - COPY(strings^[0]^, parent); - - IF Strings.Length(parent) < 1 THEN RETURN FALSE END; - - noneTerminal := self.GetNonTerminal(self, parent); - - IF noneTerminal = NIL THEN RETURN FALSE END; - - FOR i := 1 TO LEN(strings^) - 1 DO - Strings.Append(strings^[i]^, children); - IF i < LEN(strings^) - 1 THEN - Strings.Append(".", children); - END; - END; - - RETURN noneTerminal.GetTerminal(noneTerminal, children, returnValue); - - RETURN FALSE; -END GetTerminal; - -PROCEDURE GetTerminalKeys(self : JsonTypePointer; VAR destination : StringList.TStringList); -VAR - i: LONGINT; -BEGIN - IF destination = NIL THEN destination := StringList.Create() END; - FOR i := 0 TO self.TerminalNumber DO - destination.AppendString(destination, self.TerminalKeys[i]); - END; -END GetTerminalKeys; - -PROCEDURE GetTerminalValues(self : JsonTypePointer; VAR destination : StringList.TStringList); -VAR - i: LONGINT; -BEGIN - IF destination = NIL THEN destination := StringList.Create() END; - FOR i := 0 TO self.TerminalNumber - 1 DO - destination.AppendString(destination, self.TerminalValues[i]); - END; -END GetTerminalValues; - -PROCEDURE GetNoneTerminalKeys(self : JsonTypePointer; VAR destination : ARRAY OF TString); -VAR - i: LONGINT; -BEGIN - FOR i := 0 TO self.NonTerminalNumber - 1 DO - destination[i] := self.NonTerminalKeys[i]; - END; -END GetNoneTerminalKeys; -(* - TODO: - Create a good validation for comas - Create a good validation for name repetition -*) - -PROCEDURE PushDownString( - string: ARRAY OF CHAR; - startCharacter: CHAR; - endCharacter: CHAR; - i: LONGINT; - VAR returnString: ARRAY OF CHAR): LONGINT; -VAR - characterStack: vpkCharacterStack.CharacterStackType; - j , k: LONGINT; -BEGIN - NEW(characterStack); - j := i; - characterStack := vpkCharacterStack.Create(); - Empty(returnString); - REPEAT - IF (characterStack.Count > 1) & (string[j] = endCharacter) THEN - REPEAT UNTIL characterStack.pop(characterStack) = startCharacter; - ELSE - characterStack.push(characterStack, string[j]); - INC(j); - END; - UNTIL characterStack.Count = 0; (* do not trust top it btings OAX on EOL*) - - IF j >= LEN(returnString) THEN - vpkLogger.Log('ERROR string out of range in JSON parser'); - END; - ASSERT(j < LEN(returnString)); - - FOR k := i TO j DO - returnString[k - i] := string[k]; - END; - - RETURN j; (* returning next symbol of quote *) -END PushDownString; - -PROCEDURE deQuote(text: ARRAY OF CHAR; VAR result: ARRAY OF CHAR); -VAR - i, j: LONGINT; -BEGIN - j := 0; - FOR i := 0 TO Strings.Length(text) DO - IF text[i] # quote THEN - result[j] := text[i]; - INC(j); - END; - END; -END deQuote; - -PROCEDURE Create*(text: ARRAY OF CHAR): JsonTypePointer; -VAR - self: JsonTypePointer; - i, j, terminalIterator, noneTerminalIterator: LONGINT; - characterStack: vpkCharacterStack.CharacterStackType; - key, val, nonTerminalVal, string: ARRAY ArrayMaxNumberChar OF CHAR; - symbol: CHAR; - symbolStart: CHAR; - quoteStart: BOOLEAN; -BEGIN - NEW(self); - NEW(self.NonTerminalValues, ArrayMaxNumber); - self.GetTerminal := GetTerminal; - self.GetNonTerminal := GetNonTerminal; - self.GetTerminalKeys := GetTerminalKeys; - self.GetTerminalValues := GetTerminalValues; - self.GetNoneTerminalKeys := GetNoneTerminalKeys; - NEW(characterStack); - characterStack := vpkCharacterStack.Create(); - - i := 0; - j := 0; - terminalIterator := 0; - noneTerminalIterator := 0; - - Empty(key); - Empty(val); - Empty(nonTerminalVal); - Empty(string); - - quoteStart := FALSE; - - REPEAT - IF (text[i] = symbolBracketStart) & (i = 0) THEN - INC(i); - (* Logger.Log("Starting Parse Json"); *) - END; - - IF symbol = symbolBracketStart THEN - (* Logger.Log("End Parsing Json"); *) - END; - symbol := text[i]; - - (* Logger.LogIntLn(i); *) - (* IF i > 508 THEN - Logger.Log(text); - END; *) - (* terminals *) - IF symbol = quote THEN - i := PushDownString(text, quote, quote, i, string); - END; - - IF (Strings.Length(string) > 0) & (symbol = quote) THEN - IF Strings.Length(key) > 0 THEN - COPY(string, val); - ELSE - COPY(string, key); - END; - - Empty(string); - END; - - IF (Strings.Length(key) > 0) & (Strings.Length(val) > 0) THEN - deQuote(key, self.TerminalKeys[terminalIterator]); - deQuote(val, self.TerminalValues[terminalIterator]); - - INC(terminalIterator); - - Empty(key); - Empty(val); - END; - - (* none terminals *) - IF symbol = symbolBracketStart THEN - i := PushDownString(text, symbolBracketStart, symbolBracketEnd, i, string); - END; - - IF (Strings.Length(string) > 0) & (symbol = symbolBracketStart) THEN - IF Strings.Length(key) > 0 THEN - COPY(string, nonTerminalVal); - END; - - Empty(string); - END; - - IF (Strings.Length(key) > 0) & (Strings.Length(nonTerminalVal) > 0) THEN - deQuote(key, self.NonTerminalKeys[noneTerminalIterator]); - self.NonTerminalValues[noneTerminalIterator] := Create(nonTerminalVal); - - INC(noneTerminalIterator); - - Empty(key); - Empty(nonTerminalVal); - END; - - INC(i); - UNTIL (i >= LEN(text) - 1) OR (text[i] = 0X); - - self.NonTerminalNumber := noneTerminalIterator; - self.TerminalNumber := terminalIterator; - - RETURN self; -END Create; - -END vpkJsonParser. diff --git a/src/vpkPackageResolver.Mod b/src/vpkPackageResolver.Mod deleted file mode 100644 index ecfeb53..0000000 --- a/src/vpkPackageResolver.Mod +++ /dev/null @@ -1,50 +0,0 @@ -MODULE vpkPackageResolver; -IMPORT vpkStorage, vpkHttp, Strings, vpkLogger, vpkSettings, vpkJsonParser; - -CONST ArrayMaxNumber = 1000; - -PROCEDURE ResolveFile *(host, port, path, packageName, fileName : ARRAY OF CHAR; VAR returnValue : ARRAY OF CHAR); -VAR - localPath: ARRAY ArrayMaxNumber OF CHAR; - isSuccessfull: BOOLEAN; -BEGIN - vpkLogger.Log('path'); - vpkLogger.Log(path); - vpkHttp.get(host, port, path, returnValue); - vpkHttp.getClean(returnValue, returnValue); - isSuccessfull := vpkStorage.createDir(packageName, vpkSettings.installPath); - - IF ~isSuccessfull THEN vpkLogger.Log("Something went wrong, while downloading files") END; - ASSERT(isSuccessfull); - vpkLogger.Log(path); - - vpkLogger.Log(packageName); - COPY(vpkSettings.installPath, localPath); - - Strings.Append("/", localPath); - Strings.Append(packageName, localPath); - Strings.Append("/", localPath); - Strings.Append(fileName, localPath); - - isSuccessfull := vpkStorage.stringToFile(localPath, returnValue); - -END ResolveFile; - -PROCEDURE Resolve *(host, port, path, packageName, version: ARRAY OF CHAR; files: ARRAY OF vpkJsonParser.TString); -VAR - i : LONGINT; - helperString: ARRAY 10000 OF CHAR; -BEGIN - Strings.Append("/", path); - FOR i := 0 TO LEN(files) - 1 DO - IF ~Strings.Match(files[i], "") THEN - vpkJsonParser.Empty(helperString); - COPY(path, helperString); - Strings.Append(files[i], helperString); - - ResolveFile(host, port, helperString, packageName, files[i], helperString); - END; - END; -END Resolve; - -END vpkPackageResolver.