public static string CheckProccessAliases(ProccessDefination proccess)
        {
            var alias = proccess.Alias;
            if (string.IsNullOrWhiteSpace(alias)) throw new ArgumentException("ProccessDefination.Alias is required.");
            var at = alias.IndexOf("/");
            if (at < 0) throw new ArgumentException("Proccess alias is invalid. It should contains / at least once");
            if (at == alias.Length - 1) throw new ArgumentException("Proccess alias["+alias+"] is invalid.");
            var at1 = alias.IndexOf("/", at+1);
            if (at1 >= 0) throw new ArgumentException("Proccess alias is invalid. It should contains / only once.");
            var shortAlias = alias.Substring(at + 1);
            if (string.IsNullOrEmpty(shortAlias)) throw new ArgumentException("ProccessDefination.Alias is not correct. It should be 'packageAlias/proccessId'. ");

            if (!CheckExecutionAlias(proccess.StartAlias, alias)) throw new ArgumentException("StartAlias is invalid");
            if (!CheckExecutionAlias(proccess.FinishAlias, alias)) throw new ArgumentException("FinishAlias is invalid");

            return shortAlias;
        }
Example #2
0
 public ProccessDefination(ProccessDefination other) : base(other)
 {
     this.StartAlias = other.StartAlias;
     this.FinishAlias = other.FinishAlias;
     this.RuntimeId = other.RuntimeId;
 }
Example #3
0
        public ProccessInfo(ProccessDefination defination) : base(Guid.NewGuid(), defination)
        {

        }
Example #4
0
        void TestDefinationAccess(IDefinationRepository rep) {
            #region package
            PackageDefination pack1 = new PackageDefination()
            {
                Alias = "Test1",
                Name = "Test Package1",
                Description = "Just for test package=1"
            };

            rep.SavePackageDefination(pack1);
            PackageDefination pack2 = new PackageDefination() {
                Alias ="Test2",
                Name = "Test Package2",
                Description = "Just for test package=2"
            };
            pack2.Extras["author"] = "yiy";
            rep.SavePackageDefination(pack2);
            var packs = rep.ListPackages();
            Assert.Equal(2,packs.Count);
            Assert.Equal("Test1",packs[0].Alias);
            Assert.Equal("Test2",packs[1].Alias);

            var pack = rep.GetPackageDefination("test2");
            Assert.Equal("Test2",pack.Alias);
            Assert.Equal("Test Package2",pack.Name);
            Assert.Equal("Just for test package=2",pack.Description);
            Assert.Equal(1,pack.Extras.Count);
            Assert.Equal("yiy",pack.Extras["author"]);
            #endregion

            #region proccess
            var proccess = new ProccessDefination();
            proccess.Alias = "test2/proccess1";
            proccess.Name = "Proccess1";
            proccess.StartAlias = "test2/proccess1/PR";
            proccess.FinishAlias = "test2/proccess1/PO";

            rep.SaveProccessDefination(proccess);

            var pro = rep.GetProccessDefination("test2/proccess1");
            Assert.Equal("test2/proccess1",pro.Alias);
            Assert.Equal("Proccess1",pro.Name);
            Assert.Equal("test2/proccess1/PR", pro.StartAlias);
            Assert.Equal("test2/proccess1/PO", pro.FinishAlias);


            #endregion

            #region activity
            var prActivity = new ActivityDefination();
            prActivity.Alias = "test2/proccess1/PR";
            prActivity.Name = "PR";
            prActivity.InstanceType = "Activity";
            prActivity.StartMode = ExecutionModes.Automatic;
            prActivity.StartConstraintKind = ConstraintKinds.Code;
            prActivity.StartConstraint = "return true";
            prActivity.FinishMode = ExecutionModes.Manual;
            prActivity.FinishConstraintKind = ConstraintKinds.Class;
            prActivity.FinishConstraint = "Finish";
            

            rep.SaveActivityDefination(prActivity);

            var activity = rep.GetActivityDefination("test2/proccess1/PR");
            Assert.Equal("test2/proccess1/PR", activity.Alias);
            Assert.Equal("PR", activity.Name);
            Assert.Equal("test2/proccess1", activity.ProccessAlias);
            Assert.Equal("Activity", activity.InstanceType);
            Assert.Equal(ExecutionModes.Automatic, activity.StartMode);
            Assert.Equal(ConstraintKinds.Code, activity.StartConstraintKind);
            Assert.Equal("return true", activity.StartConstraint);
            Assert.Equal(ExecutionModes.Manual, activity.FinishMode);
            Assert.Equal(ConstraintKinds.Class, activity.FinishConstraintKind);
            Assert.Equal("Finish", activity.FinishConstraint);
            #endregion

            #region transaction
            var trans = new TransactionDefination();
            trans.Alias = "test2/proccess1/PR2PO";
            trans.Name = "PR2PO";
            trans.InstanceType = "Transaction";
            trans.Constraint = "return true;";
            trans.ConstraintKind = ConstraintKinds.Code;
            trans.FromAlias = "test2/proccess1/PR";
            trans.ToAlias = "test2/proccess1/PO";


            rep.SaveTransactionDefination(trans);

            var transaction = rep.GetTransactionDefination("test2/proccess1/PR2PO");
            Assert.Equal("test2/proccess1/PR2PO", transaction.Alias);
            Assert.Equal("PR2PO", transaction.Name);
            Assert.Equal("test2/proccess1", transaction.ProccessAlias);
            Assert.Equal("Transaction", transaction.InstanceType);
            Assert.Equal(ConstraintKinds.Code, transaction.ConstraintKind);
            Assert.Equal("return true;", transaction.Constraint);
            
            Assert.Equal("test2/proccess1/PR", transaction.FromAlias);
            Assert.Equal("test2/proccess1/PO", transaction.ToAlias);
            #endregion

            #region list execution
            var list = rep.ListExecutionDefinations("test2/proccess1");
            Assert.NotNull(list);
            Assert.Equal(2,list.Count);
            Assert.NotNull(list.FirstOrDefault(p=>p.Alias == "test2/proccess1/PR"));
            Assert.NotNull(list.FirstOrDefault(p => p.Alias == "test2/proccess1/PR2PO"));
            #endregion
        }
 public IList<ProccessDefination> ListProccessDefnations(string packageAlias)
 {
     var packDir = this.Storage.GetDirectory(packageAlias);
     if (packDir == null) return null;
     var items = packDir.ListItems(false, StorageTypes.File);
     List<ProccessDefination> result = new List<ProccessDefination>();
     foreach (var item in items)
     {
         if (!item.Name.EndsWith(".proccess.json")) continue;
         var jsonText = packDir.GetText( item.Name);
         if (jsonText == null) continue;
         var data = new Json.Parser().Parse(jsonText) as JObject;
         if (data == null) continue;
         var def = new ProccessDefination(data);
         result.Add(def);
     }
     return result;
 }
 public void SaveProccessDefination(ProccessDefination proccess)
 {
     var alias = proccess.Alias;
     var shortAlias = CheckProccessAliases(proccess);
     
     var dir = this.Storage.GetDirectory(alias, true);
     this.Storage.PutText(alias + ".proccess.json", proccess.ToJson());
 }