public static FlatClusterAnalyzer AnalyzeFlatWithCluster(int?cmax = 10)
        {
            FlatClusterAnalyzer fca = new FlatClusterAnalyzer();
            MyEntityContext     ctx = Application.Context;


            Console.WriteLine("--> Adding data from database");

            int counter = 0;
            var allSet  = ctx.Objects;
            IQueryable <RSPO.IObject> qSet;

            if (cmax != null)
            {
                qSet = allSet.Take((int)cmax);
            }
            else
            {
                qSet = allSet;
            }

            foreach (IObject o in qSet)
            {
                if (counter % 100 == 0)
                {
                    Console.Write("" + counter + "     \r");
                }
                fca.Add(o);
                counter++;
            }

            Console.WriteLine("\nStarting cluster analysis....");
            if (!fca.Process())
            {
                throw new ProcessingException("cannot process data");
            }
            Console.WriteLine("Finished....");

            return(fca);
        }
Ejemplo n.º 2
0
        public WebModule() : base()
        {
            Get["/"] = parameters =>
            {
                RestoreSession();
                ApplicationModel appModel = new ApplicationModel(Application.APPLICATION_NAME);
                return(Render("index.pt", context: appModel,
                              view: new ApplicationView(appModel, CurrentSession)));
            };

            Get["/objs"] = parameters =>             // Это страница сайта с квартирами.
            {
                RestoreSession();

                ObjectList objList = new ObjectList();
                // Надо отлаживать в монодевелоп...
                ObjectListView objView = new ObjectListView(objList);
                return(Render("objlist.pt", context: objList, view: objView));
            };

            Get["/offers"] = parameters =>
            {
                RestoreSession();
                OfferList     model = new OfferList(null);
                OfferListView view  = new OfferListView(model);
                return(Render("offerlist.pt", context: model, view: view));
            };

            Get["/offers/{clid}"] = parameters =>
            {
                int clid = int.Parse(parameters.clid);
                RestoreSession();
                OfferList     model = new OfferList(clid: clid);
                OfferListView view  = new OfferListView(model);
                return(Render("offerlist.pt", context: model, view: view));
            };

            Get["/offer/{GUID}"] = parameters =>             // Эта страница с индивидуальной квартирой
            {
                RestoreSession();
                string GUID  = parameters.GUID;
                IOffer model = Application.Context.Offers.Where(x => x.GUID == GUID).FirstOrDefault();

                // По идее в BrightStarDB есть у каждого объекта свой ID и наш
                // GUID можно к нему привязать. FIXME: Привязать!

                string msg = "Объект (Offer) не найден!: " + GUID;
                if (model == null)
                {
                    Console.WriteLine(msg);
                    // и я НЕ понял почему....
                    return("msg");
                }
                else
                {
                    Console.WriteLine(model);
                }
                // Надо нудно искать ошибку в основном шаблоне....
                // Завтра. Вырубает....

                OfferView view = new OfferView(model);
                return(Render("offer.pt", context: model, view: view));
            };

            Get["/agents"] = parameters =>
            {
                RestoreSession();
                AgentList     model = new AgentList();
                AgentListView view  = new AgentListView(model);
                return(Render("agentlist.pt", context: model, view: view));
            };

            Get["/login"] = parameters =>             // Эта страница уже лет 20 не нужна.
            {
                RestoreSession();
                LoginObject model = new LoginObject();
                LoginView   view  = new LoginView(model, this.Request, CurrentSession);

                // return View["login.pt", testModel]; // Оставим для истории.
                // Это, к стати правильный вариант отрисовки по шаблону.

                return(Render("login.pt", context: model, view: view));
            };

            // Принимаем данные пользователя из формы регистрации
            Post["/login"] = parameters =>
            {
                RestoreSession();

                LoginObject model = new LoginObject();
                LoginView   view  = new LoginView(model, this.Request, CurrentSession);

                Response response = null;
                bool     res      = view.Process();

                CurrentSession = view.Session;                         // Обновление сессии
                if (res)
                {
                    response = Response.AsRedirect("/");
                }
                else                         // Неуданая идентификация
                {
                    response = Response.AsRedirect("/login");
                }
                // Перенаправить браузер на домашнюю страницу.
                return(InSession(response));
            };

            Get["/logout"] = parameters =>             // Эта страница уже лет 20 не нужна.
            {
                RestoreSession();
                LoginObject model = new LoginObject();
                LoginView   view  = new LoginView(model, this.Request, CurrentSession);

                // return View["login.pt", testModel]; // Оставим для истории.
                // Это, к стати правильный вариант отрисовки по шаблону.
                view.Logout();
                CurrentSession = view.Session;

                return(Render("login.pt", context: model, view: view));
            };

            Post["/clustering"] = parameters =>
            {
                RestoreSession();

                Response response = null;

                int num = 0;
                try
                {
                    num = int.Parse(this.Request.Form.max);
                    int clnum             = 5;
                    FlatClusterAnalyzer a = FlatClusterAnalyzer.AnalyzeFlatWithCluster(num);
                    a.Store(clnum);

                    CurrentSession["message"] = info("Обработано для " + num + " квартир, " + clnum + " кластеров",
                                                     msg: "Успешный запуск");
                    CurrentSession["analysis_data"] = a;
                }
                catch (FormatException)
                {
                    CurrentSession["message"] = error("Неправильное число квартир", msg: "Неуспешный запуск");
                }

                response = Response.AsRedirect("/analysis");
                return(InSession(response));
            };

            Get["/analysis"] = parameters =>
            {
                RestoreSession();
                ClusterList     model = new ClusterList();
                ClusterListView view  = new ClusterListView(model);
                return(Render("clusters.pt", context: model, view: view));
            };

            Post["/analysis"] = parameters =>
            {
                RestoreSession();
                ClusterList         model    = new ClusterList();
                ClusterListView     view     = new ClusterListView(model);
                FlatClusterAnalyzer analyzer = null;
                var form = this.Request.Form;
                if (form.reconstruct != null)
                {
                    try
                    {
                        analyzer = (FlatClusterAnalyzer)CurrentSession["analysis_data"];
                        int k = int.Parse(form.numclusters);
                        Console.WriteLine("---> K=" + k);
                        analyzer.Store(k);
                        CurrentSession["message"] = info("Произведена перестройка кластера", msg: "Удачное завершение операции");
                    }
                    catch
                    {
                        // В сессии нет данных по кластеру.
                        CurrentSession["message"] = error("Похоже кластер не рассчитан", msg: "Неудачная операция");
                    }
                }
                return(InSession(Response.AsRedirect("/analysis")));
            };
        }