示例#1
0
 public ViewManager(string viewfolder, IDocStorage <Guid> objstore, IKeyStoreHF kvhf, ITokenizer tokenizer)
 {
     _Path        = viewfolder;
     _objectStore = objstore;
     _kvhf        = kvhf;
     _tokenizer   = tokenizer;
 }
        static void Main(string[] args)
        {
            /*1*/

            // Save a document as fb2 file using "Save" dialog
            DocumentManager docManager = new Fb2DocumentManager();

            docManager.Save(new XDocument(), "asd.fb2");
            // Or use the IDocStorage interface to save a document
            IDocStorage storage = docManager.CreateStorage();

            storage.Save("asd.fb2", new XDocument());

            /*2*/

            storage =
                docManager.CreateStorage(DocumentManager.StorageFormat.Docx);
            storage.Save("asd.docx", new XDocument());

            /*3*/

            docManager =
                new DocumentManagerGeneric <Fb2DocStorage>();
            storage = docManager.CreateStorage();
            storage.Save("asd.fb2", new XDocument());

            /*4*/
            // инициализация переменной фабрики Fb2-реализацией
            docManager = new DocumentManagerGenericAdapter();
            storage    =
                docManager.CreateStorage <DocxDocStorage>();
            storage.Save("asd4.docx", new XDocument());
        }
 public DocumentationController(IDocStorage docs, IFileStorage files, IGroupsRepository groups, IUserRepository users, IHostingEnvironment env)
 {
     Documentation = docs;
     Files         = files;
     Repository    = groups;
     Users         = users;
     environment   = env;
 }
 public ReplicationClient(string dataFolder, string config, IDocStorage<Guid> docs)
 {
     _log.Debug("starting replication client : " + dataFolder);
     _docs = docs;
     _path = dataFolder;
     // read client config file
     _config = fastJSON.JSON.ToObject<ClientConfiguration>(config);
     Initialize();
 }
        public bool Save(XDocument document, String _name)
        {
            // using Factory method to create a new document storage
            IDocStorage storage = this.CreateStorage();

            storage.Save(_name, document);

            return(true);
        }
 public ReplicationClient(string dataFolder, string config, IDocStorage <Guid> docs)
 {
     _log.Debug("starting replication client : " + dataFolder);
     _docs = docs;
     _path = dataFolder;
     // read client config file
     _config = fastJSON.JSON.ToObject <ClientConfiguration>(config);
     Initialize();
 }
示例#7
0
 public static bool TryRetrieve(this IDocStorage storage, string id, out Stream stream)
 {
     stream = null;
     try {
         stream = storage.Retrieve(id);
         return(true);
     } catch {
         return(false);
     }
 }
示例#8
0
        public HelpSource(string base_filename, bool create)
        {
            this.name         = Path.GetFileName(base_filename);
            this.basePath     = Path.GetDirectoryName(base_filename);
            this.treeFilePath = base_filename + ".tree";
            this.storage      = new MonkeyDoc.Storage.ZipStorage(base_filename + ".zip");

            tree = create ? new Tree(this, string.Empty, string.Empty) : new Tree(this, treeFilePath);

            source_id = id++;
        }
示例#9
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DocSetSink"/> class.
        /// </summary>
        /// <param name="storage">The storage.</param>
        /// <param name="batchSizeLimit">The batch size limit.</param>
        /// <param name="period">The period.</param>
        /// <param name="formatProvider">The format provider.</param>
        /// <param name="propertiesAsTags">The properties as tags.</param>
        /// <param name="propertiesWhiteList">The properties filer.</param>
        /// <exception cref="System.ArgumentNullException"></exception>
        public DocSetSink(IDocStorage <LogEvent> storage, int batchSizeLimit, TimeSpan period,
                          IFormatProvider formatProvider, IEnumerable <string> propertiesAsTags = null,
                          IEnumerable <string> propertiesWhiteList = null)
        {
            //if (storage == null) throw new ArgumentNullException(nameof(storage));

            _storage             = storage;
            _formatProvider      = formatProvider;
            _propertiesAsTags    = propertiesAsTags;
            _propertiesWhiteList = propertiesWhiteList;
        }
示例#10
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DocSetSink"/> class.
        /// </summary>
        /// <param name="storage">The storage.</param>
        /// <param name="batchSizeLimit">The batch size limit.</param>
        /// <param name="period">The period.</param>
        /// <param name="formatProvider">The format provider.</param>
        /// <param name="propertiesAsTags">The properties as tags.</param>
        /// <param name="propertiesWhiteList">The properties filer.</param>
        /// <exception cref="System.ArgumentNullException"></exception>
        public DocSetSink(IDocStorage<LogEvent> storage, int batchSizeLimit, TimeSpan period,
            IFormatProvider formatProvider, IEnumerable<string> propertiesAsTags = null,
            IEnumerable<string> propertiesWhiteList = null)
        {
            //if (storage == null) throw new ArgumentNullException(nameof(storage));

            _storage = storage;
            _formatProvider = formatProvider;
            _propertiesAsTags = propertiesAsTags;
            _propertiesWhiteList = propertiesWhiteList;
        }
示例#11
0
 public TaskController(IDocStorage docs,
                       IFileStorage files,
                       IGroupsRepository groups,
                       ApplicationContext ctx,
                       IHostingEnvironment env
                       )
 {
     Documentation = docs;
     Files         = files;
     Repository    = groups;
     Context       = ctx;
     environment   = env;
 }
示例#12
0
 public AccountController(UserManager <User> manag, RoleManager <IdentityRole> roles
                          , ApplicationContext ctx, SignInManager <User> signInManager,
                          AppMailSender Sender,
                          IGroupsRepository groups,
                          IDocStorage docs)
 {
     context       = ctx;
     Manager       = manag;
     Roles         = roles;
     SignInManager = signInManager;
     MailSender    = Sender;
     Docs          = docs;
     Groups        = groups;
 }
示例#13
0
        public DocSet(Func <TDoc, TKey> key, IDocStorage <TDoc> docStorage,
                      IEnumerable <Func <TDoc, string> > tagMap = null)
        {
            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }
            if (docStorage == null)
            {
                throw new ArgumentNullException(nameof(docStorage));
            }

            _key        = key;
            _docStorage = docStorage;
            _tagMap     = tagMap;
        }
示例#14
0
 public AccountController(SignInManager <User> sim,
                          UserManager <User> manag,
                          RoleManager <IdentityRole> roles,
                          IUserRepository users,
                          IGroupsRepository groups,
                          IDocStorage docs,
                          IFileStorage files
                          )
 {
     SignInManager = sim;
     Manager       = manag;
     Roles         = roles;
     Users         = users;
     Docs          = docs;
     Files         = files;
     Groups        = groups;
 }
示例#15
0
        static void Main(string[] args)
        {
            DocumentManager docManager = new DocumentGeneric <DocXDocStorage>();
            IDocStorage     storage    = docManager.CreateStorage();

            storage.Load("asd.docx");
            storage.Print("asd.docx", new XDocument());

            docManager = new DocumentGeneric <EpubDocStorage>();
            storage    = docManager.CreateStorage();
            storage.Save("qwert.epub", new XDocument());

            docManager = new DocumentGeneric <HtmlDocStorage>();
            storage    = docManager.CreateStorage();
            storage.Close("qwert.html", new XDocument());

            Console.ReadLine();
        }
 public ReplicationServer(string datapath, string config, IDocStorage<Guid> docs)
 {
     _docs = docs;
     _Path = datapath;
     Initialize(config);
 }
示例#17
0
 public ViewManager(string viewfolder, IDocStorage <Guid> objstore)
 {
     _Path        = viewfolder;
     _objectStore = objstore;
 }
示例#18
0
 public ViewManager(string viewfolder, IDocStorage <Guid> objstore, IKeyStoreHF kvhf)
 {
     _Path        = viewfolder;
     _objectStore = objstore;
     _kvhf        = kvhf;
 }
示例#19
0
        public static void PopulateTreeFromIndexFile(string indexFilePath,
                                                     string idPrefix,
                                                     Tree tree,
                                                     IDocStorage storage,
                                                     Dictionary <string, XElement> nsSummaries,
                                                     Func <XElement, string> indexGenerator = null,
                                                     IEcmaProviderFileSource fileSource     = null)
        {
            fileSource = fileSource ?? DefaultEcmaProviderFileSource.Default;
            var root  = tree.RootNode;
            int resID = 0;
            var asm   = Path.GetDirectoryName(indexFilePath);

            storage = storage ?? new Storage.NullStorage();
            // nsSummaries is allowed to be null if the user doesn't care about it
            nsSummaries = nsSummaries ?? new Dictionary <string, XElement> ();
            // default index generator uses a counter
            indexGenerator = indexGenerator ?? (_ => resID++.ToString());

            using (var reader = fileSource.GetIndexReader(indexFilePath)) {
                reader.ReadToFollowing("Types");
                var types = XElement.Load(reader.ReadSubtree());

                foreach (var ns in types.Elements("Namespace"))
                {
                    var nsName = (string)ns.Attribute("Name");
                    nsName = !string.IsNullOrEmpty(nsName) ? nsName : "global";
                    var nsNode = root.GetOrCreateNode(nsName, "N:" + nsName);

                    XElement nsElements;
                    if (!nsSummaries.TryGetValue(nsName, out nsElements))
                    {
                        nsSummaries[nsName] = nsElements = new XElement("elements",
                                                                        new XElement("summary"),
                                                                        new XElement("remarks"));
                    }
                    //Add namespace summary and remarks data from file, if available
                    var nsFileName = fileSource.GetNamespaceXmlPath(asm, nsName);

                    if (File.Exists(nsFileName))
                    {
                        var nsEl = fileSource.GetNamespaceElement(nsFileName);

                        nsElements.Element("summary").ReplaceWith(nsEl.Descendants("summary").First());
                        nsElements.Element("remarks").ReplaceWith(nsEl.Descendants("remarks").First());
                    }
                    else
                    {
                        Console.WriteLine("Error reading namespace XML for {0} at {1}", nsName, nsFileName);
                    }

                    foreach (var type in ns.Elements("Type"))
                    {
                        // Add the XML file corresponding to the type to our storage
                        var    id = indexGenerator(type);
                        string typeFilePath;
                        var    typeDocument = EcmaDoc.LoadTypeDocument(asm, nsName, type.Attribute("Name").Value, out typeFilePath, fileSource);
                        if (typeDocument == null)
                        {
                            continue;
                        }

                        // write the document (which may have been modified by the fileSource) to the storage
                        MemoryStream io = new MemoryStream();
                        using (var writer = XmlWriter.Create(io)) {
                            typeDocument.WriteTo(writer);
                        }
                        io.Seek(0, SeekOrigin.Begin);
                        storage.Store(id, io);

                        nsElements.Add(ExtractClassSummary(typeDocument));

                        var typeCaption = EcmaDoc.GetTypeCaptionFromIndex(type);
                        var url         = idPrefix + id + '#' + typeCaption + '/';
                        typeCaption = EcmaDoc.GetTypeCaptionFromIndex(type, true);
                        var typeNode = nsNode.CreateNode(typeCaption, url);

                        // Add meta "Members" node
                        typeNode.CreateNode("Members", "*");
                        var membersNode = typeDocument.Root.Element("Members");
                        if (membersNode == null || !membersNode.Elements().Any())
                        {
                            continue;
                        }
                        var members = membersNode
                                      .Elements("Member")
                                      .ToLookup(EcmaDoc.GetMemberType);

                        foreach (var memberType in members)
                        {
                            // We pluralize the member type to get the caption and take the first letter as URL
                            var node        = typeNode.CreateNode(EcmaDoc.PluralizeMemberType(memberType.Key), memberType.Key[0].ToString());
                            var memberIndex = 0;

                            var isCtors = memberType.Key[0] == 'C';

                            // We do not escape much member name here
                            foreach (var memberGroup in memberType.GroupBy(m => MakeMemberCaption(m, isCtors)))
                            {
                                if (memberGroup.Count() > 1)
                                {
                                    // Generate overload
                                    var overloadCaption = MakeMemberCaption(memberGroup.First(), false);
                                    var overloadNode    = node.CreateNode(overloadCaption, overloadCaption);
                                    foreach (var member in memberGroup)
                                    {
                                        overloadNode.CreateNode(MakeMemberCaption(member, true), (memberIndex++).ToString());
                                    }
                                    overloadNode.Sort();
                                }
                                else
                                {
                                    // We treat constructor differently by showing their argument list in all cases
                                    node.CreateNode(MakeMemberCaption(memberGroup.First(), isCtors), (memberIndex++).ToString());
                                }
                            }
                            node.Sort();
                        }
                    }

                    nsNode.Sort();
                }
                root.Sort();
            }
        }
示例#20
0
 public SearchController(IUserRepository users, IDocStorage docs)
 {
     UserData      = users;
     Documentation = docs;
 }
示例#21
0
 public TaskController(UserManager <User> manager, SignInManager <User> signInManager, IDocStorage docs, IFileStorage files, IGroupsRepository groups, IHostingEnvironment env)
 {
     Manager     = manager; SignInManager = signInManager; Docs = docs; Files = files;
     Groups      = groups;
     environment = env;
 }
示例#22
0
        internal void SetView <T>(View <T> view, IDocStorage <Guid> docs)
        {
            bool rebuild = false;

            _view = view;
            // generate schemacolumns from schema
            GenerateSchemaColumns(_view);

            if (_Path.EndsWith(_S) == false)
            {
                _Path += _S;
            }
            _Path += view.Name + _S;
            if (Directory.Exists(_Path) == false)
            {
                Directory.CreateDirectory(_Path);
                rebuild = true;
            }
            else
            {
                // read version file and check with view
                int version = 0;
                if (File.Exists(_Path + _view.Name + ".version"))
                {
                    int.TryParse(File.ReadAllText(_Path + _view.Name + ".version"), out version);
                    if (version != view.Version)
                    {
                        _log.Debug("Newer view version detected");
                        rebuild = true;
                    }
                }
            }

            if (File.Exists(_Path + _dirtyFilename))
            {
                _log.Debug("Last shutdown failed, rebuilding view : " + _view.Name);
                rebuild = true;
            }

            if (File.Exists(_Path + _RaptorDBVersionFilename))
            {
                // check view engine version
                string s       = File.ReadAllText(_Path + _RaptorDBVersionFilename);
                int    version = 0;
                int.TryParse(s, out version);
                if (version != _RaptorDBVersion)
                {
                    _log.Debug("RaptorDB view engine upgrade, rebuilding view : " + _view.Name);
                    rebuild = true;
                }
            }
            else
            {
                _log.Debug("RaptorDB view engine upgrade, rebuilding view : " + _view.Name);
                rebuild = true;
            }

            if (rebuild)
            {
                _log.Debug("Deleting old view data folder = " + view.Name);
                Directory.Delete(_Path, true);
                Directory.CreateDirectory(_Path);
            }
            // load indexes here
            CreateLoadIndexes(_schema);

            _deletedRows = new BoolIndex(_Path, _view.Name, ".deleted");

            _viewData = new StorageFile <Guid>(_Path + view.Name + ".mgdat");

            CreateResultRowFiller();

            mapper = view.Mapper;
            // looking for the T in View<T>
            if (view.GetType().GetGenericArguments().Length == 1) // HACK : kludge change when possible
            {
                basetype = view.GetType().GetGenericArguments()[0];
            }
            else
            {
                // or recurse until found
                basetype = view.GetType().BaseType.GetGenericArguments()[0];
            }

            if (rebuild)
            {
                Task.Factory.StartNew(() => RebuildFromScratch(docs));
            }

            _saveTimer           = new System.Timers.Timer();
            _saveTimer.AutoReset = true;
            _saveTimer.Elapsed  += new System.Timers.ElapsedEventHandler(_saveTimer_Elapsed);
            _saveTimer.Interval  = Global.SaveIndexToDiskTimerSeconds * 1000;
            _saveTimer.Start();
        }
示例#23
0
文件: EcmaDoc.cs 项目: kajacode/mono
		public static void PopulateTreeFromIndexFile (string indexFilePath,
		                                              Tree tree,
		                                              IDocStorage storage,
		                                              Dictionary<string, XElement> nsSummaries,
		                                              Func<XElement, string> indexGenerator = null)
		{
			var root = tree.RootNode;
			int resID = 0;
			var asm = Path.GetDirectoryName (indexFilePath);

			storage = storage ?? new Storage.NullStorage ();
			// nsSummaries is allowed to be null if the user doesn't care about it
			nsSummaries = nsSummaries ?? new Dictionary<string, XElement> ();
			// default index generator uses a counter
			indexGenerator = indexGenerator ?? (_ => resID++.ToString ());

			using (var reader = XmlReader.Create (File.OpenRead (indexFilePath))) {
				reader.ReadToFollowing ("Types");
				var types = XElement.Load (reader.ReadSubtree ());

				foreach (var ns in types.Elements ("Namespace")) {
					var nsName = (string)ns.Attribute ("Name");
					nsName = !string.IsNullOrEmpty (nsName) ? nsName : "global";
					var nsNode = root.GetOrCreateNode (nsName, "N:" + nsName);

					XElement nsElements;
					if (!nsSummaries.TryGetValue (nsName, out nsElements))
						nsSummaries[nsName] = nsElements = new XElement ("elements",
						                                                 new XElement ("summary"),
						                                                 new XElement ("remarks"));

					foreach (var type in ns.Elements ("Type")) {
						// Add the XML file corresponding to the type to our storage
						var id = indexGenerator (type);
						string typeFilePath;
						var typeDocument = EcmaDoc.LoadTypeDocument (asm, nsName, type.Attribute ("Name").Value, out typeFilePath);
						using (var file = File.OpenRead (typeFilePath))
							storage.Store (id, file);
						nsElements.Add (ExtractClassSummary (typeFilePath));

						var typeCaption = EcmaDoc.GetTypeCaptionFromIndex (type);
						var url = "ecma:" + id + '#' + typeCaption + '/';
						typeCaption = EcmaDoc.GetTypeCaptionFromIndex (type, true);
						var typeNode = nsNode.CreateNode (typeCaption, url);

						// Add meta "Members" node
						typeNode.CreateNode ("Members", "*");
						var membersNode = typeDocument.Root.Element ("Members");
						if (membersNode == null || !membersNode.Elements ().Any ())
							continue;
						var members = membersNode
							.Elements ("Member")
							.ToLookup (EcmaDoc.GetMemberType);

						foreach (var memberType in members) {
							// We pluralize the member type to get the caption and take the first letter as URL
							var node = typeNode.CreateNode (EcmaDoc.PluralizeMemberType (memberType.Key), memberType.Key[0].ToString ());
							var memberIndex = 0;

							var isCtors = memberType.Key[0] == 'C';

							// We do not escape much member name here
							foreach (var memberGroup in memberType.GroupBy (m => MakeMemberCaption (m, isCtors))) {
								if (memberGroup.Count () > 1) {
									// Generate overload
									var overloadCaption = MakeMemberCaption (memberGroup.First (), false);
									var overloadNode = node.CreateNode (overloadCaption, overloadCaption);
									foreach (var member in memberGroup)
										overloadNode.CreateNode (MakeMemberCaption (member, true), (memberIndex++).ToString ());
									overloadNode.Sort ();
								} else {
									// We treat constructor differently by showing their argument list in all cases
									node.CreateNode (MakeMemberCaption (memberGroup.First (), isCtors), (memberIndex++).ToString ());
								}
							}
							node.Sort ();
						}
					}

					nsNode.Sort ();
				}
				root.Sort ();
			}
		}
 public ReplicationServer(string datapath, string config, IDocStorage <Guid> docs)
 {
     _docs = docs;
     _Path = datapath;
     Initialize(config);
 }
示例#25
0
        public static void PopulateTreeFromIndexFile(string indexFilePath,
                                                     string idPrefix,
                                                     Tree tree,
                                                     IDocStorage storage,
                                                     Dictionary <string, XElement> nsSummaries,
                                                     Func <XElement, string> indexGenerator = null)
        {
            var root  = tree.RootNode;
            int resID = 0;
            var asm   = Path.GetDirectoryName(indexFilePath);

            storage = storage ?? new Storage.NullStorage();
            // nsSummaries is allowed to be null if the user doesn't care about it
            nsSummaries = nsSummaries ?? new Dictionary <string, XElement> ();
            // default index generator uses a counter
            indexGenerator = indexGenerator ?? (_ => resID++.ToString());

            using (var reader = XmlReader.Create(File.OpenRead(indexFilePath))) {
                reader.ReadToFollowing("Types");
                var types = XElement.Load(reader.ReadSubtree());

                foreach (var ns in types.Elements("Namespace"))
                {
                    var nsName = (string)ns.Attribute("Name");
                    nsName = !string.IsNullOrEmpty(nsName) ? nsName : "global";
                    var nsNode = root.GetOrCreateNode(nsName, "N:" + nsName);

                    XElement nsElements;
                    if (!nsSummaries.TryGetValue(nsName, out nsElements))
                    {
                        nsSummaries[nsName] = nsElements = new XElement("elements",
                                                                        new XElement("summary"),
                                                                        new XElement("remarks"));
                    }

                    foreach (var type in ns.Elements("Type"))
                    {
                        // Add the XML file corresponding to the type to our storage
                        var    id = indexGenerator(type);
                        string typeFilePath;
                        var    typeDocument = EcmaDoc.LoadTypeDocument(asm, nsName, type.Attribute("Name").Value, out typeFilePath);
                        if (typeDocument == null)
                        {
                            continue;
                        }
                        using (var file = File.OpenRead(typeFilePath))
                            storage.Store(id, file);
                        nsElements.Add(ExtractClassSummary(typeFilePath));

                        var typeCaption = EcmaDoc.GetTypeCaptionFromIndex(type);
                        var url         = idPrefix + id + '#' + typeCaption + '/';
                        typeCaption = EcmaDoc.GetTypeCaptionFromIndex(type, true);
                        var typeNode = nsNode.CreateNode(typeCaption, url);

                        // Add meta "Members" node
                        typeNode.CreateNode("Members", "*");
                        var membersNode = typeDocument.Root.Element("Members");
                        if (membersNode == null || !membersNode.Elements().Any())
                        {
                            continue;
                        }
                        var members = membersNode
                                      .Elements("Member")
                                      .ToLookup(EcmaDoc.GetMemberType);

                        foreach (var memberType in members)
                        {
                            // We pluralize the member type to get the caption and take the first letter as URL
                            var node        = typeNode.CreateNode(EcmaDoc.PluralizeMemberType(memberType.Key), memberType.Key[0].ToString());
                            var memberIndex = 0;

                            var isCtors = memberType.Key[0] == 'C';

                            // We do not escape much member name here
                            foreach (var memberGroup in memberType.GroupBy(m => MakeMemberCaption(m, isCtors)))
                            {
                                if (memberGroup.Count() > 1)
                                {
                                    // Generate overload
                                    var overloadCaption = MakeMemberCaption(memberGroup.First(), false);
                                    var overloadNode    = node.CreateNode(overloadCaption, overloadCaption);
                                    foreach (var member in memberGroup)
                                    {
                                        overloadNode.CreateNode(MakeMemberCaption(member, true), (memberIndex++).ToString());
                                    }
                                    overloadNode.Sort();
                                }
                                else
                                {
                                    // We treat constructor differently by showing their argument list in all cases
                                    node.CreateNode(MakeMemberCaption(memberGroup.First(), isCtors), (memberIndex++).ToString());
                                }
                            }
                            node.Sort();
                        }
                    }

                    nsNode.Sort();
                }
                root.Sort();
            }
        }
示例#26
0
        private void RebuildFromScratch(IDocStorage <Guid> docs)
        {
            _rebuilding = true;
            try
            {
                insertmethod = this.GetType().GetMethod("Insert", BindingFlags.Instance | BindingFlags.NonPublic);
                _log.Debug("Rebuilding view from scratch...");
                _log.Debug("View = " + _view.Name);
                DateTime dt = FastDateTime.Now;

                int c = docs.RecordCount();
                for (int i = 0; i < c; i++)
                {
                    StorageItem <Guid> meta = null;
                    object             b    = docs.GetObject(i, out meta);
                    if (meta != null && meta.isDeleted)
                    {
                        Delete(meta.key);
                    }
                    else
                    {
                        if (b != null)
                        {
                            object obj = b;
                            Type   t   = obj.GetType();
                            if (t == typeof(View_delete))
                            {
                                View_delete vd = (View_delete)obj;
                                if (vd.Viewname.ToLower() == this._view.Name.ToLower())
                                {
                                    ViewDelete(vd.Filter);
                                }
                            }
                            else if (t == typeof(View_insert))
                            {
                                View_insert vi = (View_insert)obj;
                                if (vi.Viewname.ToLower() == this._view.Name.ToLower())
                                {
                                    ViewInsert(vi.ID, vi.RowObject);
                                }
                            }
                            else if (t.IsSubclassOf(basetype) || t == basetype)
                            {
                                var m = insertmethod.MakeGenericMethod(new Type[] { obj.GetType() });
                                m.Invoke(this, new object[] { meta.key, obj });
                            }
                        }
                        else
                        {
                            _log.Error("Doc is null : " + meta.key);
                        }
                    }
                }
                _log.Debug("rebuild view '" + _view.Name + "' done (s) = " + FastDateTime.Now.Subtract(dt).TotalSeconds);

                // write version.dat file when done
                File.WriteAllText(_Path + _view.Name + ".version", _view.Version.ToString());
            }
            catch (Exception ex)
            {
                _log.Error("Rebuilding View failed : " + _view.Name, ex);
            }
            _rebuilding = false;
        }