|
/*
* Copyright 2006, Dustin Metzgar
*
* Licensed 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.CodeDom;
using System.Collections.Generic;
namespace XmiCodeDomLib.Version1_2
{
[XmiParser("UML:Attribute")]
public class XmiAttribute : XmiBaseClass, IModelElement, IStructuralFeature, IFeature
{
#region IModelElement Members
private string _Name = string.Empty;
private bool _IsSpecification;
private string _Visibility = string.Empty;
[XmiAttribute]
public string Name
{
get
{
return _Name;
}
set
{
_Name = value;
}
}
[XmiAttribute]
public bool IsSpecification
{
get
{
return _IsSpecification;
}
set
{
_IsSpecification = value;
}
}
[XmiAttribute]
public string Visibility
{
get
{
return _Visibility;
}
set
{
_Visibility = value;
}
}
#endregion
#region IStructuralFeature Members
private object _Type = null;
private XmiMult _Multiplicity = null;
private string _TargetScope = string.Empty;
public object Type {
get {
return _Type;
}
set {
_Type = value;
}
}
public XmiMult Multiplicity
{
get { return _Multiplicity; }
set { _Multiplicity = value; }
}
[XmiAttribute]
public string TargetScope
{
get { return _TargetScope; }
set { _TargetScope = value; }
}
#endregion
#region IFeature Members
private string _OwnerScope = string.Empty;
[XmiAttribute]
public string OwnerScope {
get {
return _OwnerScope;
}
set {
_OwnerScope = value;
}
}
#endregion
#region Methods for creating CodeDom graph
public void AddToClass(CodeTypeDeclaration ctd, CodeDomHelper cdhelper)
{
string name = XmiRoot.GetSafeName(Name);
if (name != string.Empty)
{
CodeTypeReference ctr = cdhelper.ResolveTypeRef(_Type);
CodeMemberField cmf = new CodeMemberField(ctr, "_" + name);
CodeMemberProperty cmp = new CodeMemberProperty();
cmp.Name = name;
cmp.Type = ctr;
cmp.Attributes = MemberAttributes.Public;
cmp.HasGet = true;
CodeThisReferenceExpression cThis = new CodeThisReferenceExpression();
CodeFieldReferenceExpression fieldRef = new CodeFieldReferenceExpression(cThis, "_" + name);
CodeMethodReturnStatement ret = new CodeMethodReturnStatement(fieldRef);
cmp.GetStatements.Add(ret);
cmp.HasSet = true;
CodePropertySetValueReferenceExpression cValue = new CodePropertySetValueReferenceExpression();
CodeAssignStatement setStmt = new CodeAssignStatement(fieldRef, cValue);
cmp.SetStatements.Add(setStmt);
ctd.Members.Add(cmf);
ctd.Members.Add(cmp);
}
}
public void AddToInterface(CodeTypeDeclaration ctd, CodeDomHelper cdhelper)
{
string name = XmiRoot.GetSafeName(Name);
if (name != string.Empty)
{
CodeTypeReference ctr = cdhelper.ResolveTypeRef(_Type);
CodeMemberProperty cmp = new CodeMemberProperty();
cmp.Name = name;
cmp.Type = ctr;
cmp.Attributes = MemberAttributes.Public;
cmp.HasGet = true;
cmp.HasSet = true;
ctd.Members.Add(cmp);
}
}
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.