/*
* Initial version copyright 2008 Lockheed Martin Corporation, except
* as stated in the file entitled Licensing-Information.
*
* All modifications copyright 2009-2012 Data Access Technologies, Inc.
*
* Licensed under the Academic Free License version 3.0
* (http://www.opensource.org/licenses/afl-3.0.php), except as stated
* in the file entitled Licensing-Information.
*/
package fUML.Syntax.Classes.Kernel;
import fUML.Debug;
import UMLPrimitiveTypes.*;
public abstract class Classifier extends fUML.Syntax.Classes.Kernel.Type {
public boolean isAbstract = false;
public fUML.Syntax.Classes.Kernel.GeneralizationList generalization = new fUML.Syntax.Classes.Kernel.GeneralizationList();
public fUML.Syntax.Classes.Kernel.FeatureList feature = new fUML.Syntax.Classes.Kernel.FeatureList();
public fUML.Syntax.Classes.Kernel.NamedElementList inheritedMember = new fUML.Syntax.Classes.Kernel.NamedElementList();
public fUML.Syntax.Classes.Kernel.PropertyList attribute = new fUML.Syntax.Classes.Kernel.PropertyList();
public fUML.Syntax.Classes.Kernel.ClassifierList general = new fUML.Syntax.Classes.Kernel.ClassifierList();
public boolean isFinalSpecialization = false;
protected void addFeature(fUML.Syntax.Classes.Kernel.Feature feature) {
// Note: This operation should not be used directly to add Properties.
// The addAttribute operation should be used instead.
this.feature.addValue(feature);
feature._addFeaturingClassifier(this);
} // addFeature
protected void addAttribute(fUML.Syntax.Classes.Kernel.Property attribute) {
this.addFeature(attribute);
this.attribute.addValue(attribute);
} // addAttribute
public void addGeneralization(
fUML.Syntax.Classes.Kernel.Generalization generalization) {
this.addOwnedElement(generalization);
this.generalization.addValue(generalization);
generalization._setSpecific(this);
this.general.addValue(generalization.general);
NamedElementList inheritedMembers = this.inherit(generalization.general
.inheritableMembers(this));
for (int i = 0; i < inheritedMembers.size(); i++) {
NamedElement inheritedMember = inheritedMembers.getValue(i);
this.addMember(inheritedMember);
this.inheritedMember.addValue(inheritedMember);
}
} // addGeneralization
public void setIsAbstract(boolean isAbstract) {
this.isAbstract = isAbstract;
} // setIsAbstract
public fUML.Syntax.Classes.Kernel.NamedElementList inherit(
fUML.Syntax.Classes.Kernel.NamedElementList inhs) {
NamedElementList inheritedElements = new NamedElementList();
for (int i = 0; i < inhs.size(); i++) {
inheritedElements.addValue(inhs.getValue(i));
}
return inheritedElements;
} // inherit
public fUML.Syntax.Classes.Kernel.NamedElementList inheritableMembers(
fUML.Syntax.Classes.Kernel.Classifier c) {
NamedElementList inheritable = new NamedElementList();
for (int i = 0; i < this.member.size(); i++) {
NamedElement m = this.member.getValue(i);
if (c.hasVisibilityOf(m)) {
inheritable.addValue(m);
}
}
return inheritable;
} // inheritableMembers
public boolean hasVisibilityOf(fUML.Syntax.Classes.Kernel.NamedElement n) {
for (int i = 0; i < this.inheritedMember.size(); i++) {
if (this.inheritedMember.getValue(i) == n) {
return n.visibility != VisibilityKind.private_;
}
}
return true;
} // hasVisibilityOf
public void setIsFinalSpecialization(boolean isFinalSpecialization) {
this.isFinalSpecialization = isFinalSpecialization;
} // setIsFinalSpecialization
} // Classifier