//METHODS #region Methods public abstract void Execute(UMLRelationship r, ActionMap map, List <PreFile> files);
//METHODS #region Methods public static ActionMap ReadFile(string filepath) { StreamReader sr = new StreamReader(filepath); String line; String[] tokens; ActionKey actionKey; ActionMap map = new ActionMap(); Type actionType; String actionKeyString; int linecounter = 0; while (!sr.EndOfStream) { line = sr.ReadLine(); linecounter++; tokens = line.Split('/'); //tokens[0] = entry-type //tokens[1] = parameters actionKeyString = EncodeEntryType(tokens[0], linecounter); tokens = tokens[1].Split(':'); //verify action format is valid switch (actionKeyString[0].ToString()) { case ActionKey.EntryType.ASSOCIATION: actionKeyString += EncodeParametersAssociation(tokens, linecounter); break; case ActionKey.EntryType.ASSOCIATIONCLASS: actionKeyString += EncodeParametersAssociationClass(tokens, linecounter); break; case ActionKey.EntryType.GENERALIZATION: actionKeyString += EncodeParametersGeneralization(tokens, linecounter); break; case ActionKey.EntryType.REALIZATION: actionKeyString += EncodeParametersRealization(tokens, linecounter); break; } if (Regex.IsMatch(tokens[tokens.Length - 1], @"^[A-Za-z0-9]*$")) { actionKey = new ActionKey(actionKeyString); //add the value-pair if no equal action-key exists if (map.GetAction(actionKey) == null) { //create/validate action object actionType = Type.GetType(ActionKey.ACTIONNAMESPACE + tokens[tokens.Length - 1]); //add the map entry map.Add(actionKey, (AbstractAction)Activator.CreateInstance(actionType)); } else { throw new InvalidOperationException("An equivalent ActionKey already exists in the ActionMap at line: " + linecounter); } } else { throw new ArgumentException("The action-name contains some invalid characters at line: " + linecounter); } } return(map); }