コード例 #1
0
 //METHODS
 #region Methods
 public abstract void Execute(UMLRelationship r, ActionMap map, List <PreFile> files);
コード例 #2
0
        //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);
        }