using System;
using System.Runtime.Serialization;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Text.RegularExpressions;
namespace AnticipatingMinds.Genesis.KnowledgeManagement{
/// <summary>
/// Summary description for LocationApplicabilityScope.
/// </summary>
[Serializable]
public class FileApplicabilityScope : ApplicabilityScope, ICloneable, ISerializable
{
#region Instance constructors
public FileApplicabilityScope():base()
{
}
public FileApplicabilityScope(FileApplicabilityScope fileApplicabilityScope):base(fileApplicabilityScope)
{
if(fileApplicabilityScope.FileName != null)
FileName = new Regex(fileApplicabilityScope.FileName.ToString());
}
#endregion Instance constructors
#region ICloneable Members
object ICloneable.Clone()
{
return new FileApplicabilityScope(this);
}
#endregion
#region ISerializable Implementation
protected FileApplicabilityScope(SerializationInfo info, StreamingContext context) : base(info,context)
{
string fileNamePattern = info.GetString("FileName");
if(fileNamePattern.Length != 0)
FileName = new Regex(fileNamePattern);
else
FileName = null;
}
public override void GetObjectData(
SerializationInfo info, StreamingContext context)
{
base.GetObjectData(info,context);
if(FileName != null)
info.AddValue("FileName",FileName.ToString());
else
info.AddValue("FileName",String.Empty);
}
#endregion
#region Public instance properties
public override string Title
{
get
{
return "File Name";
}
}
[Category("Behavior")]
[DefaultValue(null)]
[TypeConverter(typeof(RegExpTypeConverter))]
[Description("Regular expression used to define the criteria for the name to be used in scope definition.")]
public Regex FileName
{
get
{
return filename;
}
set
{
if(value != null)
filename = new Regex(value.ToString(),RegexOptions.IgnoreCase);
else
filename = null;
}
}
#endregion Public instance properties
#region Protected instance methods
protected override bool DoesElementMatchScopeConditions(AnticipatingMinds.Genesis.CodeDOM.CodeElement codeElement)
{
if(FileName == null)
return true;
if(FileName != null && codeElement.SourcePosition != null)
{
return FileName.Match(codeElement.SourcePosition.FileName).Success;
}
else
return false; //Code lement does not have source position specified and as such does not meet scope condition
}
#endregion Protected instance methods
#region Private instance fields
private Regex filename;
#endregion Private instance fields
}
}
|