#*************************** bolero inspector add-on ********************************
### common
inspector.node.element.*.*.item.Doc.item.$doc.condition = !getContainingNode()->hasProperty ("Bolero")

################################
### class and interface properties
################################

inspector.node.element.*.*.item.Description.view.UI = SinglePropertyNodeUI
inspector.node.element.*.*.item.Description.item.description_0 = HTMLStringField
inspector.node.element.*.*.item.Description.condition = hasProperty ("Bolero") || getContainingNode()->hasProperty ("Bolero")

## Remove standard fields from OI ############################################
inspector.node.element.*.Class.item.Properties.item.$relativeFile.condition = !hasProperty ("Bolero")
inspector.node.element.cpp.Class.item.Properties.item.$relativeDefinitionFile.condition = !hasProperty ("Bolero")
inspector.node.element.java.Class.item.Properties.item.$public.condition = !hasProperty ("Bolero") && !hasProperty("$interface") && getContainingNode() == null
inspector.node.element.java.Class.item.Properties.item.$static.condition = !hasProperty ("Bolero") && getContainingNode() != null
inspector.node.element.java.Class.item.Properties.item.$final.condition = !hasProperty ("Bolero") && !hasProperty("$interface")
inspector.node.element.java.Class.item.Properties.item.$abstract.condition = !hasProperty ("Bolero") && !hasProperty("$interface")
inspector.node.element.*.Class.item.Properties.item.stereotype.condition = !hasProperty ("Bolero")
inspector.node.element.*.Class.item.Properties.item.alias.condition = !hasProperty ("Bolero")
inspector.node.element.java.Class.item.Properties.item.invariants.condition = !hasProperty ("Bolero")

inspector.node.element.*.Class.item.Properties.item.persistent.condition = !hasProperty ("Bolero")

inspector.node.element.java.Class.item.Properties.item.see.condition = !hasProperty ("Bolero")
inspector.node.element.java.Class.item.Properties.item.version.condition = !hasProperty ("Bolero")
inspector.node.element.java.Class.item.Properties.item.author.condition = !hasProperty ("Bolero")
inspector.node.element.java.Class.item.Properties.item.exception.condition = !hasProperty ("Bolero")
inspector.node.element.java.Class.item.Properties.item.deprecated.condition = !hasProperty ("Bolero")
inspector.node.element.java.Class.item.Properties.item.since.condition = !hasProperty ("Bolero")
inspector.node.element.java.Class.item.Properties.item.$interface.condition = !hasProperty ("Bolero")
inspector.node.element.*.*.item.Doc.condition = !hasPropertyValue("$shapeType", "Note") && !isPackage() && !hasPropertyValue("$shapeType", "GeneralizationLink") && !hasPropertyValue("$shapeType", "ImplementationLink") && !hasProperty ("Bolero") && !getContainingNode()->hasProperty ("Bolero")
##############################################################################

inspector.node.element.java.Class.item.Properties.item.$extends.name = SuperType

inspector.node.element.java.Class.item.Properties.item.$implements.name = Implements Interfaces

inspector.node.element.java.Class.item.Properties.item.public = BooleanField
inspector.node.element.java.Class.item.Properties.item.public.condition = hasProperty ("Bolero")
inspector.node.element.java.Class.item.Properties.item.public.name = Public

inspector.node.element.*.Class.item.Properties.item.kind = ChoiceField
\ (
\   {
\     values := {"0", "1", "2"},
\     names := {"concrete", "final", "abstract"}
\   }
\ )
inspector.node.element.*.Class.item.Properties.item.kind.condition = hasProperty ("Bolero") && !hasProperty("$interface")
inspector.node.element.*.Class.item.Properties.item.kind.name = Kind

inspector.node.element.*.Class.item.Properties.item.classProperty = ChoiceField
\ (
\   {
\     values := {"0", "1", "2", "3"},
\     names := {"transient", "persistenceCapable", "controlsTA", "checkDirty"}
\   }
\ )
inspector.node.element.*.Class.item.Properties.item.classProperty.condition = hasProperty ("Bolero") && !hasProperty("$interface")
inspector.node.element.*.Class.item.Properties.item.classProperty.name = Class Property

inspector.node.element.*.Class.item.Properties.item.requiringTransaction = BooleanField
inspector.node.element.*.Class.item.Properties.item.requiringTransaction.condition = hasProperty ("Bolero") && !hasProperty("$interface")
inspector.node.element.*.Class.item.Properties.item.requiringTransaction.name = Required Transaction

inspector.node.element.*.Class.item.Properties.item.withPopulation = BooleanField
inspector.node.element.*.Class.item.Properties.item.withPopulation.condition = hasProperty ("Bolero") && !hasProperty("$interface")
inspector.node.element.*.Class.item.Properties.item.withPopulation.name = With Population

inspector.node.element.*.Class.item.Properties.item.bean = BooleanField
inspector.node.element.*.Class.item.Properties.item.bean.condition = hasProperty ("Bolero") && !hasProperty("$interface")
inspector.node.element.*.Class.item.Properties.item.bean.name = Java Bean

inspector.node.element.*.Class.item.Properties.item.typeParameter = StringField
inspector.node.element.*.Class.item.Properties.item.typeParameter.multiple = true
inspector.node.element.*.Class.item.Properties.item.typeParameter.name = Type Parameter
inspector.node.element.*.Class.item.Properties.item.typeParameter.condition = hasProperty ("Bolero")

inspector.node.element.*.Class.item.Properties.item.paramOfSuperClass_0 = StringField
inspector.node.element.*.Class.item.Properties.item.paramOfSuperClass_0.name = ParamOfSuperClass
inspector.node.element.*.Class.item.Properties.item.paramOfSuperClass_0.condition = hasProperty ("Bolero") && !hasProperty("$interface")

inspector.node.element.*.Class.item.Properties.item.paramsOfImplementedInterfaces_0 = StringField
inspector.node.element.*.Class.item.Properties.item.paramsOfImplementedInterfaces_0.multiple = true
inspector.node.element.*.Class.item.Properties.item.paramsOfImplementedInterfaces_0.name = ParamsOfImplementedInterfaces
inspector.node.element.*.Class.item.Properties.item.paramsOfImplementedInterfaces_0.condition = hasProperty ("Bolero") && !hasProperty("$interface")

inspector.node.element.*.Class.item.Properties.item.paramsOfSuperInterfaces_0 = StringField
inspector.node.element.*.Class.item.Properties.item.paramsOfSuperInterfaces_0.multiple = true
inspector.node.element.*.Class.item.Properties.item.paramsOfSuperInterfaces_0.name = ParamsOfSuperInterfaces
inspector.node.element.*.Class.item.Properties.item.paramsOfSuperInterfaces_0.condition = hasProperty ("Bolero") && hasProperty("$interface")

inspector.node.element.*.Class.item.Properties.item.Imports = StringField
inspector.node.element.*.Class.item.Properties.item.Imports.multiple = true
inspector.node.element.*.Class.item.Properties.item.Imports.condition = hasProperty ("Bolero")

########################
### feature properties
########################

### operation

## disable standard properties
inspector.node.element.*.Operation.item.Properties.item.$name.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.$parameter.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.$returnType.condition = !hasProperty("$constructor") && !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.$throw.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.$static.condition = !hasProperty("$constructor") && !getContainingNode()->hasProperty("$interface") && !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.$final.condition = !hasProperty("$constructor") && !getContainingNode()->hasProperty("$interface") && !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.$abstract.condition = !hasProperty("$constructor") && !getContainingNode()->hasProperty("$interface") && !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.$native.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.stereotype.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.alias.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.input.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.output.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.time.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.preconditions.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.postconditions.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.semantics.condition = !getContainingNode()->hasProperty ("Bolero")

inspector.node.element.java.Operation.item.Properties.item.see.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.see.multiple.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.version.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.author.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.param.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.return.condition = !hasProperty("$constructor") && !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.exception.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.deprecated.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.since.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Operation.item.Properties.item.$synchronized.condition = !getContainingNode()->hasProperty("$interface") && !getContainingNode()->hasProperty ("Bolero")
##
inspector.node.element.*.Operation.item.Properties.item.Name = StringField

inspector.node.element.*.Operation.item.Properties.item.classFeature = ChoiceField
\ (
\   {
\     values := {"false", "true"},
\     names := {"instance", "class"}
\   }
\ )
inspector.node.element.*.Operation.item.Properties.item.classFeature.name = Scope
inspector.node.element.*.Operation.item.Properties.item.classFeature.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.*.Operation.item.Properties.item.modifiability = ChoiceField
\ (
\   {
\     values := {"0", "1", "2"},
\     names := {"modifiable", "immutable", "unchecked"}
\   }
\ )
inspector.node.element.*.Operation.item.Properties.item.modifiability.name = Modifiability
inspector.node.element.*.Operation.item.Properties.item.modifiability.condition = getContainingNode()->hasProperty ("Bolero") && (getProperty("Name") != "Constructor")

inspector.node.element.*.Operation.item.Properties.item.nullable = BooleanField
inspector.node.element.*.Operation.item.Properties.item.nullable.name = Nullable
inspector.node.element.*.Operation.item.Properties.item.nullable.condition = getContainingNode()->hasProperty ("Bolero") && (getProperty("Name") != "Constructor")

inspector.node.element.*.Operation.item.Properties.item.overrides = BooleanField
inspector.node.element.*.Operation.item.Properties.item.overrides.name = Overrides
inspector.node.element.*.Operation.item.Properties.item.overrides.condition = getContainingNode()->hasProperty ("Bolero") && (getProperty("Name") != "Constructor")

inspector.node.element.*.Operation.item.Properties.item.featureKind = ChoiceField
\ (
\   {
\     values := {"0", "1", "2"},
\     names := {"concrete", "final", "abstract"}
\   }
\ )
inspector.node.element.*.Operation.item.Properties.item.featureKind.name = FeatureKind
inspector.node.element.*.Operation.item.Properties.item.featureKind.condition = getContainingNode()->hasProperty ("Bolero") && (getProperty("Name") != "Constructor")

inspector.node.element.java.Operation.item.Properties.item.synchronized = BooleanField
inspector.node.element.java.Operation.item.Properties.item.synchronized.name = Synchronized
inspector.node.element.java.Operation.item.Properties.item.synchronized.condition = !getContainingNode()->hasProperty("$interface") && (getProperty("Name") != "Constructor")

inspector.node.element.*.Operation.item.Properties.item.controlsTransaction = BooleanField
inspector.node.element.*.Operation.item.Properties.item.controlsTransaction.condition = getContainingNode()->hasProperty ("Bolero") && (getProperty("Name") != "Constructor")
inspector.node.element.*.Operation.item.Properties.item.controlsTransaction.name = ControlsTransaction
inspector.node.element.*.Operation.item.Properties.item.implicitParametersUnchecked = BooleanField
inspector.node.element.*.Operation.item.Properties.item.implicitParametersUnchecked.condition = getContainingNode()->hasProperty ("Bolero")
inspector.node.element.*.Operation.item.Properties.item.implicitParametersUnchecked.name = ImplicitParametersUnchecked
#inspector.node.element.*.Operation.item.Properties.item.ThisModifiable = ChoiceField
#\ (
#\   {
#\     values := {"0", "1", "2"},
#\     names := {"modifiable", "immutable", "unchecked"}
#\   }
#\ )
#inspector.node.element.*.Operation.item.Properties.item.ThisModifiable.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.*.Operation.item.Properties.item.Precondition = StringField
inspector.node.element.*.Operation.item.Properties.item.Precondition.multiple = true
inspector.node.element.*.Operation.item.Properties.item.Precondition.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.*.Operation.item.Properties.item.Postcondition = StringField
inspector.node.element.*.Operation.item.Properties.item.Postcondition.multiple = true
inspector.node.element.*.Operation.item.Properties.item.Postcondition.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.*.Operation.item.Implementation.view.UI = SinglePropertyNodeUI
inspector.node.element.*.Operation.item.Implementation.item.methodBody_0 = HTMLStringField
inspector.node.element.*.Operation.item.Implementation.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.*.Operation.item.Properties.item.exceptions_0 = StringField
inspector.node.element.*.Operation.item.Properties.item.exceptions_0.multiple = true
inspector.node.element.*.Operation.item.Properties.item.exceptions_0.name = ThrowsException
inspector.node.element.*.Operation.item.Properties.item.exceptions_0.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.*.Operation.item.Properties.item.typeName_0 = StringField
inspector.node.element.*.Operation.item.Properties.item.typeName_0.name = ResultType
inspector.node.element.*.Operation.item.Properties.item.typeName_0.condition = getContainingNode()->hasProperty ("Bolero") && (getProperty("Name") != "Constructor")

inspector.node.element.*.Operation.item.Properties.item.initialValue_0 = StringField
inspector.node.element.*.Operation.item.Properties.item.initialValue_0.name = InitialValue
inspector.node.element.*.Operation.item.Properties.item.initialValue_0.condition = getContainingNode()->hasProperty ("Bolero") && (getProperty("Name") != "Constructor")

inspector.node.element.*.Operation.item.Properties.item.methodTypeParameter = StringField
inspector.node.element.*.Operation.item.Properties.item.methodTypeParameter.multiple = true
inspector.node.element.*.Operation.item.Properties.item.methodTypeParameter.name = Type Parameter
inspector.node.element.*.Operation.item.Properties.item.methodTypeParameter.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.*.Operation.item.Properties.item.explicitParameter = StringField
inspector.node.element.*.Operation.item.Properties.item.explicitParameter.multiple = true
inspector.node.element.*.Operation.item.Properties.item.explicitParameter.name = Parameter
inspector.node.element.*.Operation.item.Properties.item.explicitParameter.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.*.Operation.item.Properties.item.implicitParameter = StringField
inspector.node.element.*.Operation.item.Properties.item.implicitParameter.multiple = true
inspector.node.element.*.Operation.item.Properties.item.implicitParameter.name = ImplicitParameter
inspector.node.element.*.Operation.item.Properties.item.implicitParameter.condition = getContainingNode()->hasProperty ("Bolero")

### attribute

## disable standard properties
#inspector.node.element.java.Attribute.item.Properties.item.$type.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Attribute.item.Properties.item.$initialValue.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Attribute.item.Properties.item.$static.condition = !getContainingNode()->hasProperty ("Bolero") && !getContainingNode()->hasProperty("$interface")
inspector.node.element.java.Attribute.item.Properties.item.$final.condition = !getContainingNode()->hasProperty ("Bolero") && !getContainingNode()->hasProperty("$interface")
inspector.node.element.java.Attribute.item.Properties.item.$volatile.condition = !getContainingNode()->hasProperty ("Bolero") && !getContainingNode()->hasProperty("$interface")
inspector.node.element.java.Attribute.item.Properties.item.$transient.condition = !getContainingNode()->hasProperty ("Bolero") && !getContainingNode()->hasProperty("$interface")
inspector.node.element.java.Attribute.item.Properties.item.stereotype.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Attribute.item.Properties.item.alias.condition = !getContainingNode()->hasProperty ("Bolero")

; JavaDoc tags
inspector.node.element.java.Attribute.item.Properties.item.see.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Attribute.item.Properties.item.version.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Attribute.item.Properties.item.author.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Attribute.item.Properties.item.deprecated.condition = !getContainingNode()->hasProperty ("Bolero")
inspector.node.element.java.Attribute.item.Properties.item.since.condition = !getContainingNode()->hasProperty ("Bolero")
##

inspector.node.element.java.Attribute.item.Properties.item.$type = ClassField({title:="Select type"})
inspector.node.element.*.Attribute.item.Properties.item.$associates = ClassField({title:="Select associated object"})
inspector.node.element.java.Attribute.item.Properties.item.typeName_0 = ClassField({title:="Select type"})
inspector.node.element.java.Attribute.item.Properties.item.typeName_0.name = Type Parameter
inspector.node.element.jave.Attribute.item.Properties.item.typeName_0.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.java.Attribute.item.Properties.item.initialValue_0 = StringField
inspector.node.element.java.Attribute.item.Properties.item.initialValue_0.name = InitialValue
inspector.node.element.java.Attribute.item.Properties.item.initialValue_0.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.*.Attribute.item.Properties.item.classFeature = ChoiceField
\ (
\   {
\     values := {"false", "true"},
\     names := {"instance", "class"}
\   }
\ )
inspector.node.element.*.Attribute.item.Properties.item.classFeature.name = Scope
inspector.node.element.*.Attribute.item.Properties.item.classFeature.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.*.Attribute.item.Properties.item.overrides = BooleanField
inspector.node.element.*.Attribute.item.Properties.item.overrides.name = Overrides
inspector.node.element.*.Attribute.item.Properties.item.overrides.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.java.Attribute.item.Properties.item.transient = BooleanField
inspector.node.element.java.Attribute.item.Properties.item.transient.name = Transient
inspector.node.element.java.Attribute.item.Properties.item.transient.condition = getContainingNode()->hasProperty ("Bolero") && !getContainingNode()->hasProperty("$interface")

inspector.node.element.*.Attribute.item.Properties.item.modifiability = ChoiceField
\ (
\   {
\     values := {"0", "1", "2"},
\     names := {"modifiable", "immutable", "unchecked"}
\   }
\ )

inspector.node.element.*.Attribute.item.Properties.item.modifiability.name = Modifiability
inspector.node.element.*.Attribute.item.Properties.item.modifiability.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.*.Attribute.item.Properties.item.nullable = BooleanField
inspector.node.element.*.Attribute.item.Properties.item.nullable.name = Nullable
inspector.node.element.*.Attribute.item.Properties.item.nullable.condition = getContainingNode()->hasProperty ("Bolero")


inspector.node.element.java.Attribute.item.Properties.item.synchronized = BooleanField
inspector.node.element.java.Attribute.item.Properties.item.synchronized.name = Synchronized
inspector.node.element.java.Attribute.item.Properties.item.synchronized.condition = !getContainingNode()->hasProperty("$interface")

inspector.node.element.*.Attribute.item.Properties.item.featureKind = ChoiceField
\ (
\   {
\     values := {"0", "2"},
\     names := {"concrete", "abstract"}
\   }
\ )
inspector.node.element.*.Attribute.item.Properties.item.featureKind.name = FeatureKind
inspector.node.element.*.Attribute.item.Properties.item.featureKind.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.*.Attribute.item.Properties.item.transient = BooleanField
inspector.node.element.*.Attribute.item.Properties.item.transient.name = Transient

inspector.node.element.*.Attribute.item.Get.view.UI = SinglePropertyNodeUI
inspector.node.element.*.Attribute.item.Get.item.implGet_0 = HTMLStringField
inspector.node.element.*.Attribute.item.Get.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.*.Attribute.item.Set.view.UI = SinglePropertyNodeUI
inspector.node.element.*.Attribute.item.Set.item.implSet_0 = HTMLStringField
inspector.node.element.*.Attribute.item.Set.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.*.Attribute.item.Properties.item.Precondition = StringField
inspector.node.element.*.Attribute.item.Properties.item.Precondition.multiple = true
inspector.node.element.*.Attribute.item.Properties.item.Precondition.condition = getContainingNode()->hasProperty ("Bolero")

inspector.node.element.*.Attribute.item.Properties.item.Postcondition = StringField
inspector.node.element.*.Attribute.item.Properties.item.Postcondition.multiple = true
inspector.node.element.*.Attribute.item.Properties.item.Postcondition.condition = getContainingNode()->hasProperty ("Bolero")


#; link properties
#inspector.node.element.*.DependencyLink.item.Properties.item.BoleroParamOfSuperClass = StringField
#inspector.node.element.*.DependencyLink.item.Properties.item.BoleroParamOfSuperClass.condition = !getDestination()->hasProperty("$interface")
#inspector.node.element.*.DependencyLink.item.Properties.item.BoleroParamsOfImplementedInterfaces = StringField
#inspector.node.element.*.DependencyLink.item.Properties.item.BoleroParamsOfImplementedInterfaces.condition = getDestination()->hasProperty("$interface")
