/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using System.Configuration; using System.IO; using System.Reflection; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using Lucene.Net.Analysis; using Lucene.Net.Documents; using Lucene.Net.Distributed; namespace Lucene.Net.Distributed.Indexing { /// /// Base class representing a record to be added to a Lucene index. /// /// IndexDocument contains a RecordId and a Lucene.Net.Document. The RecordId /// is interrogated to determine which index to add the associated /// Lucene.Net.Document. /// /// [Serializable] public abstract class IndexDocument { #region Variables protected Document _oDocument; protected int _intRecordId; public static BinaryFormatter Formatter = new BinaryFormatter(); private static string filepath = (ConfigurationManager.AppSettings["IndexDocumentPath"] != null ? ConfigurationManager.AppSettings["IndexDocumentPath"] : ""); private static string endwhack = (filepath.EndsWith(@"\") ? "" : @"\"); private DateTime _eDateTime; #endregion #region Constructors /// /// Empty public constructor. /// public IndexDocument() { } /// /// Base constructor accepting only a RecordId. Useful for classes that /// will have no associated Document, i.e. deletes. /// /// The source recordId (see also IndexSet.IdColumn) public IndexDocument(int iRecordId) { this._intRecordId = iRecordId; this._oDocument = new Document(); this._eDateTime = DateTime.Now; } public IndexDocument(Document oDocument, int iRecordId) { this._oDocument = oDocument; this._intRecordId = iRecordId; this._eDateTime = DateTime.Now; } #endregion #region Properties public Document Document { get {return this._oDocument;} } public int RecordId { get {return this._intRecordId;} } public virtual Analyzer GetAnalyzer() { return null; } public string FileName { get { return Environment.MachineName + "_" + this.GetType().ToString() + "_" + this.RecordId.ToString() + "_" + this.DateTime.Ticks.ToString() + ".bin"; } } private DateTime DateTime { get { return this._eDateTime; } } #endregion #region Methods public void Save() { try { FileStream fs = File.Open(filepath + endwhack + this.FileName, FileMode.Create, FileAccess.ReadWrite); IndexDocument.Formatter.Serialize(fs, this); fs.Close(); } catch (SerializationException se) { throw (se); } catch (NullReferenceException nre) { throw (nre); } } public void Save(string filePath) { try { FileStream fs = File.Open(filePath + endwhack + this.FileName, FileMode.Create, FileAccess.ReadWrite); IndexDocument.Formatter.Serialize(fs, this); fs.Close(); } catch (SerializationException se) { throw (se); } catch (NullReferenceException nre) { throw (nre); } } #endregion } }