| UMMF documentation | Contained in the UMMF distribution. |
qualifier : THIS 0..* <---> associationEnd : UMMF::UML_1_5::Foundation::Core::AssociationEnd 0..1avaliableQualifier : THIS 0..* <---> associationEndRole : UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole 0..*0..*changeableinstance1aggregateprivateSet::Object
attribute : THIS 1 <---- : UMMF::UML_1_5::Behavioral_Elements::Actions::Read_Write_Actions::Attribute_Actions::AttributeAction 0..*0..*changeableinstance0noneprivateSet::Object
attribute : THIS 1 <---> attributeLink : UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink 0..*0..*changeableinstance1noneprivateSet::Object
qualifier : THIS 1 <---- : UMMF::UML_1_5::Behavioral_Elements::Actions::Read_Write_Actions::Association_Actions::ReadLinkObjectQualifierAction 0..10..1changeableinstance0noneprivateSet::Object
qualifier : THIS 1 <---- : UMMF::UML_1_5::Behavioral_Elements::Actions::Read_Write_Actions::Association_Actions::QualifierValue 0..*0..*changeableinstance0noneprivateSet::Object
referredAttribute : THIS 1 <---- : UMMF::UML_1_5::OCL::Expressions::AttributeCallExp 0..*__validate_type__typecheckisaAttributeisaFoundation__Core__Attribute__model_name __isAbstract__tangram_schema___initialize__initialize__createinitialValueset_initialValuecount_initialValueassociationEndset_associationEndadd_associationEndremove_associationEndclear_associationEndcount_associationEndassociationEndRoleset_associationEndRoleadd_associationEndRoleremove_associationEndRoleclear_associationEndRolecount_associationEndRoleattributeLinkset_attributeLinkadd_attributeLinkremove_attributeLinkclear_attributeLinkcount_attributeLink
UMMF::UML_1_5::Foundation::Core::Attribute --
1.5
initialValue : UMMF::UML_1_5::Foundation::Data_Types::Expression private1changeableinstanceunorderedSet::Objectqualifier : THIS 0..* <---> associationEnd : UMMF::UML_1_5::Foundation::Core::AssociationEnd 0..10..1changeableinstancecompositepublicSet::ObjectavaliableQualifier : THIS 0..* <---> associationEndRole : UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole 0..*0..*changeableinstanceaggregateprivateSet::Objectattribute : THIS 1 <---- : UMMF::UML_1_5::Behavioral_Elements::Actions::Read_Write_Actions::Attribute_Actions::AttributeAction 0..*0..*changeableinstancenoneprivateSet::Objectattribute : THIS 1 <---> attributeLink : UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink 0..*0..*changeableinstancenoneprivateSet::Objectqualifier : THIS 1 <---- : UMMF::UML_1_5::Behavioral_Elements::Actions::Read_Write_Actions::Association_Actions::ReadLinkObjectQualifierAction 0..10..1changeableinstancenoneprivateSet::Objectqualifier : THIS 1 <---- : UMMF::UML_1_5::Behavioral_Elements::Actions::Read_Write_Actions::Association_Actions::QualifierValue 0..*0..*changeableinstancenoneprivateSet::ObjectreferredAttribute : THIS 1 <---- : UMMF::UML_1_5::OCL::Expressions::AttributeCallExp 0..*0..*changeableinstancenoneprivateSet::Object__validate_typeUMMF::UML_1_5::Foundation::Core::Attribute->__validate_type($value);
Returns true if $value is a valid representation of UMMF::UML_1_5::Foundation::Core::Attribute.
__typecheckUMMF::UML_1_5::Foundation::Core::Attribute->__typecheck($value, $msg);
Calls confess() with $msg if <UMMF::UML_1_5::Foundation::Core::Attribute-__validate_type($value)>> is false.
isaAttributeReturns true if receiver is a UMMF::UML_1_5::Foundation::Core::Attribute. Other receivers will return false.
isaFoundation__Core__AttributeReturns true if receiver is a UMMF::UML_1_5::Foundation::Core::Attribute.
Other receivers will return false.
This is the fully qualified version of the isaAttribute method.
__model_name my $name = $obj_or_package->__model_name;
Returns the UML Model name ('Foundation::Core::Attribute') for an object or package of
this Classifier.
__isAbstract$package->__isAbstract;
Returns 0.
__tangram_schemamy $tangram_schema $obj_or_package->__tangram_schema
Returns a HASH ref that describes this Classifier for Tangram.
___initializeInitialize all Attributes and AssociationEnds in a instance of this Classifier. Does not initalize slots in its Generalizations.
See also: __initialize.
__initializeInitialize all slots in this Classifier and all its Generalizations.
See also: ___initialize.
__createCalls all <<create>> Methods for this Classifier and all Generalizations.
See also: ___create.
initialValuemy $val = $obj->initialValue;
Returns the UMMF::UML_1_5::Foundation::Data_Types::Expression value of Attribute initialValue.
set_initialValue$obj->set_initialValue($val);
Sets the value of Attribute initialValue.
$val must be of type UMMF::UML_1_5::Foundation::Data_Types::Expression or undef.
Returns $obj.
count_initialValue$obj->count_initialValue;
Returns the number of elements (0 or 1) in initialValue.
associationEndmy $val = $obj->associationEnd;
Returns the AssociationEnd associationEnd value of type UMMF::UML_1_5::Foundation::Core::AssociationEnd.
set_associationEnd$obj->set_associationEnd($val);
Sets the AssociationEnd associationEnd value.
$val must of type UMMF::UML_1_5::Foundation::Core::AssociationEnd.
Returns $obj.
add_associationEnd$obj->add_associationEnd($val);
Adds the AssociationEnd associationEnd value.
$val must of type UMMF::UML_1_5::Foundation::Core::AssociationEnd.
Throws exception if a value already exists.
Returns $obj.
remove_associationEnd$obj->remove_associationEnd($val);
Removes the AssociationEnd associationEnd value $val.
Returns $obj.
clear_associationEnd$obj->clear_associationEnd;
Clears the AssociationEnd associationEnd links to UMMF::UML_1_5::Foundation::Core::AssociationEnd.
Returns $obj.
count_associationEnd$obj->count_associationEnd;
Returns the number of elements of type UMMF::UML_1_5::Foundation::Core::AssociationEnd associated with associationEnd.
associationEndRolemy @val = $obj->associationEndRole; my $ary_val = $obj->associationEndRole;
Returns the AssociationEnd associationEndRole values of type UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole (UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole).
In array context, returns all the objects in the Association.
In scalar context, returns an array ref of all the objects in the Association.
set_associationEndRole$obj->set_associationEndRole(@val);
Sets the AssociationEnd associationEndRole value.
Elements of @val must of type UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole (UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole).
Returns $obj.
add_associationEndRole$obj->add_associationEndRole(@val);
Adds AssociationEnd associationEndRole values.
Elements of @val must of type UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole (UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole).
Returns $obj.
remove_associationEndRole$obj->remove_associationEndRole(@val);
Removes the AssociationEnd associationEndRole values @val.
Elements of @val must of type UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole (UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole).
Returns $obj.
clear_associationEndRole$obj->clear_associationEndRole;
Clears the AssociationEnd associationEndRole links to UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole (UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole).
Returns $obj.
count_associationEndRole$obj->count_associationEndRole;
Returns the number of elements associated with associationEndRole.
attributeLinkmy @val = $obj->attributeLink; my $ary_val = $obj->attributeLink;
Returns the AssociationEnd attributeLink values of type UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink (UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink).
In array context, returns all the objects in the Association.
In scalar context, returns an array ref of all the objects in the Association.
set_attributeLink$obj->set_attributeLink(@val);
Sets the AssociationEnd attributeLink value.
Elements of @val must of type UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink (UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink).
Returns $obj.
add_attributeLink$obj->add_attributeLink(@val);
Adds AssociationEnd attributeLink values.
Elements of @val must of type UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink (UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink).
Returns $obj.
remove_attributeLink$obj->remove_attributeLink(@val);
Removes the AssociationEnd attributeLink values @val.
Elements of @val must of type UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink (UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink).
Returns $obj.
clear_attributeLink$obj->clear_attributeLink;
Clears the AssociationEnd attributeLink links to UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink (UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink).
Returns $obj.
count_attributeLink$obj->count_attributeLink;
Returns the number of elements associated with attributeLink.
END OF DOCUMENT
| UMMF documentation | Contained in the UMMF distribution. |
# -*- perl -*- # DO NOT EDIT - This file is generated by UMMF; http://ummf.sourceforge.net # From template: $Id: Perl.txt,v 1.77 2006/05/14 01:40:03 kstephens Exp $ package UMMF::UML_1_5::Foundation::Core::Attribute; #use 5.6.1; use strict; use warnings; ################################################################# # Version # our $VERSION = do { my @r = (q{1.5} =~ /\d+/g); sprintf "%d." . "%03d" x $#r, @r }; ################################################################# # Documentation #
################################################################# # Dependencies # use Carp qw(croak confess); use Set::Object 1.05; use Class::Multimethods 1.70; use Data::Dumper; use Scalar::Util qw(weaken); use UMMF::UML_1_5::__ObjectBase qw(:__ummf_array); ################################################################# # Generalizations # use base qw( UMMF::UML_1_5::Foundation::Core::StructuralFeature ); ################################################################# # Exports # our @EXPORT_OK = qw( ); our %EXPORT_TAGS = ( 'all' => \@EXPORT_OK ); ################################################################# # Validation #
sub __validate_type($$) { my ($self, $x) = @_; no warnings; UNIVERSAL::isa($x, 'UMMF::UML_1_5::Foundation::Core::Attribute') ; }
sub __typecheck { my ($self, $x, $msg) = @_; confess("typecheck: $msg: type '" . 'UMMF::UML_1_5::Foundation::Core::Attribute' . ": value '$x'") unless __validate_type($self, $x); }
sub isaAttribute { 1 }
sub isaFoundation__Core__Attribute { 1 } ################################################################# # Introspection #
sub __model_name { 'Foundation::Core::Attribute' }
sub __isAbstract { 0; } my $__tangram_schema;
sub __tangram_schema { my ($self) = @_; $__tangram_schema ||= { 'classes' => [ 'UMMF::UML_1_5::Foundation::Core::Attribute' => { 'table' => 'Foundation__Core__Attribute', 'abstract' => 0, 'slots' => { # Attributes 'initialValue' => { 'type_impl' => 'ref', 'class' => 'UMMF::UML_1_5::Foundation::Data_Types::Expression', 'col' => 'initialValue', } , # Associations 'associationEnd' => { 'type_impl' => 'ref', 'class' => 'UMMF::UML_1_5::Foundation::Core::AssociationEnd', 'null' => '1', 'col' => 'associationEnd', } , 'associationEndRole' => { 'type_impl' => 'set', 'class' => 'UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole', 'table' => 'AssociationEndRole_AvaliableQualifier', 'item' => 'associationEndRole', 'coll' => 'avaliableQualifier', } , 'attributeLink' => { 'type_impl' => 'iset', 'class' => 'UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink', 'table' => 'Foundation__Core__Attribute__attributeLink', 'coll' => 'attribute', } , }, 'bases' => [ 'UMMF::UML_1_5::Foundation::Core::StructuralFeature', ], 'sql' => { }, }, ], 'sql' => { # Note Tangram::Ref::get_exporter() has # "UPDATE $table SET $self->{col} = $refid WHERE id = $id", # The id_col is hard-coded, # Thus id_col will not work. #'id_col' => '__sid', #'class_col' => '__stype', }, # 'set_id' => sub { } # 'get_id' => sub { } }; } ################################################################# # Class Attributes # ################################################################# # Class Associations # ################################################################# # Initialization #
sub ___initialize { my ($self) = @_; # Attributes # Attribute initialValue if ( exists $self->{'initialValue'} ) { my $x = $self->{'initialValue'}; $self->{'initialValue'} = undef; $self->set_initialValue($x); } else { } # Associations # AssociationEnd # qualifier 0..* # <--> # associationEnd 0..1 UMMF::UML_1_5::Foundation::Core::AssociationEnd. if ( defined $self->{'associationEnd'} ) { my $x = $self->{'associationEnd'}; $self->{'associationEnd'} = undef; $self->set_associationEnd($x); } # AssociationEnd # avaliableQualifier 0..* # <--> # associationEndRole 0..* UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole. if ( defined $self->{'associationEndRole'} ) { my $x = $self->{'associationEndRole'}; $self->{'associationEndRole'} = Set::Object->new(); $self->set_associationEndRole(@$x); } # AssociationEnd # attribute 1 # <--> # attributeLink 0..* UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink. if ( defined $self->{'attributeLink'} ) { my $x = $self->{'attributeLink'}; $self->{'attributeLink'} = Set::Object->new(); $self->set_attributeLink(@$x); } $self; } my $__initialize_use;
sub __initialize { my ($self) = @_; # $DB::single = 1; unless ( ! $__initialize_use ) { $__initialize_use = 1; $self->__use('UMMF::UML_1_5::Foundation::Core::Element'); $self->__use('UMMF::UML_1_5::Foundation::Core::ModelElement'); $self->__use('UMMF::UML_1_5::Foundation::Core::Feature'); $self->__use('UMMF::UML_1_5::Foundation::Core::StructuralFeature'); } $self->UMMF::UML_1_5::Foundation::Core::Attribute::___initialize; $self->UMMF::UML_1_5::Foundation::Core::Element::___initialize; $self->UMMF::UML_1_5::Foundation::Core::ModelElement::___initialize; $self->UMMF::UML_1_5::Foundation::Core::Feature::___initialize; $self->UMMF::UML_1_5::Foundation::Core::StructuralFeature::___initialize; $self; }
sub __create { my ($self, @args) = @_; # $DB::single = 1; $self->UMMF::UML_1_5::Foundation::Core::Attribute::___create(@args); $self->UMMF::UML_1_5::Foundation::Core::Element::___create(); $self->UMMF::UML_1_5::Foundation::Core::ModelElement::___create(); $self->UMMF::UML_1_5::Foundation::Core::Feature::___create(); $self->UMMF::UML_1_5::Foundation::Core::StructuralFeature::___create(); $self; } ################################################################# # Attributes #
################################################################# # Attribute initialValue # type = UMMF::UML_1_5::Foundation::Data_Types::Expression # multiplicity = 1 # ordering = unordered # ownerScope = instance # initialValue =
sub initialValue ($) { my ($self) = @_; ; my $val = $self->{'initialValue'}; ; $val; }
sub set_initialValue ($$) { my ($self, $val) = @_; ; if ( defined $val ) { $self->__use('UMMF::UML_1_5::Foundation::Data_Types::Expression')->__typecheck($val, "UMMF::UML_1_5::Foundation::Core::Attribute.initialValue"); } $self->{'initialValue'} = $val ; ; $self; }
sub count_initialValue ($) { my ($self) = @_; ; my $val = $self->{'initialValue'}; ; defined $val ? 1 : 0; } ################################################################# # Association #
################################################################# # AssociationEnd qualifier <---> associationEnd # type = UMMF::UML_1_5::Foundation::Core::AssociationEnd # multiplicity = 0..1 # ordering =
sub associationEnd ($) { my ($self) = @_; $self->{'associationEnd'}; }
sub set_associationEnd ($$) { my ($self, $val) = @_; no warnings; # Use of uninitialized value in string ne at ... my $old; if ( ($old = $self->{'associationEnd'}) ne $val ) { # Recursion lock if ( defined $val ) { $self->__use('UMMF::UML_1_5::Foundation::Core::AssociationEnd')->__typecheck($val, "UMMF::UML_1_5::Foundation::Core::Attribute.associationEnd") } # Recursion lock $self->{'associationEnd'} = $val ; # Remove and add associations with other ends. $old->remove_qualifier($self) if $old; $val->add_qualifier($self) if $val; } $self; }
sub add_associationEnd ($$) { my ($self, $val) = @_; no warnings; # Use of uninitialized value in string ne at ... my $old; if ( ($old = $self->{'associationEnd'}) ne $val ) { # Recursion lock $self->__use('UMMF::UML_1_5::Foundation::Core::AssociationEnd')->__typecheck($val, "UMMF::UML_1_5::Foundation::Core::Attribute.associationEnd"); # confess("UMMF::UML_1_5::Foundation::Core::Attribute::associationEnd: too many") # if defined $self->{'associationEnd'}; # Recursion lock $self->{'associationEnd'} = $val ; # Remove and add associations with other ends. $old->remove_qualifier($self) if $old; $val->add_qualifier($self) if $val; } $self; }
sub remove_associationEnd ($$) { my ($self, $val) = @_; no warnings; # Use of uninitialized value in string ne at ... my $old; if ( ($old = $self->{'associationEnd'}) eq $val ) { # Recursion lock $val = $self->{'associationEnd'} = undef; # Recursion lock # Remove and add associations with other ends. $old->remove_qualifier($self) if $old; $val->add_qualifier($self) if $val; } }
sub clear_associationEnd ($@) { my ($self) = @_; my $old; if ( defined ($old = $self->{'associationEnd'}) ) { # Recursion lock my $val = $self->{'associationEnd'} = undef; # Recursion lock # Remove and add associations with other ends. $old->remove_qualifier($self) if $old; $val->add_qualifier($self) if $val; } $self; }
sub count_associationEnd ($) { my ($self) = @_; my $x = $self->{'associationEnd'}; defined $x ? 1 : 0; }
################################################################# # AssociationEnd avaliableQualifier <---> associationEndRole # type = UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole # multiplicity = 0..* # ordering =
sub associationEndRole ($) { my ($self) = @_; my $x = $self->{'associationEndRole'}; # confess("Container for associationEndRole $x is not a blessed ref: " . Data::Dumper->new([ $self ], [qw($self)])->Maxdepth(2)->Dump()) if $x && ref($x) !~ /::/; wantarray ? ($x ? $x->members() : ()) : [ $x ? $x->members() : () ]; }
sub set_associationEndRole ($@) { my ($self, @val) = @_; $self->clear_associationEndRole; $self->add_associationEndRole(@val); }
sub add_associationEndRole ($@) { my ($self, @val) = @_; my $x = $self->{'associationEndRole'} ||= Set::Object->new(); my $old; # Place holder for other MACRO. for my $val ( @val ) { # Recursion lock next if $x->includes($val); $self->__use('UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole')->__typecheck($val, "UMMF::UML_1_5::Foundation::Core::Attribute.associationEndRole"); # Recursion lock $x->insert($val); # weaken? # Remove and add associations with other ends. $old->remove_avaliableQualifier($self) if $old; $val->add_avaliableQualifier($self) if $val; } $self; }
sub remove_associationEndRole ($@) { my ($self, @val) = @_; my $x = $self->{'associationEndRole'} ||= Set::Object->new(); for my $old ( @val ) { # Recursion lock next unless $x->includes($old); my $val = $old; $self->__use('UMMF::UML_1_5::Behavioral_Elements::Collaborations::AssociationEndRole')->__typecheck($val, "UMMF::UML_1_5::Foundation::Core::Attribute.associationEndRole"); # Recursion lock $x->remove($old); $val = undef; # Remove associations with other ends. $old->remove_avaliableQualifier($self) if $old; $val->add_avaliableQualifier($self) if $val; ; } $self; }
sub clear_associationEndRole ($) { my ($self) = @_; my $x = $self->{'associationEndRole'} ||= Set::Object->new(); my $val; # Place holder for other MACRO. $self->{'associationEndRole'} = Set::Object->new(); # Recursion lock for my $old ( $x->members() ) { # Recursion lock # Remove associations with other ends. $old->remove_avaliableQualifier($self) if $old; $val->add_avaliableQualifier($self) if $val; ; } $self; }
sub count_associationEndRole ($) { my ($self) = @_; my $x = $self->{'associationEndRole'}; defined $x ? $x->size : 0; }
################################################################# # AssociationEnd attribute <---> attributeLink # type = UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink # multiplicity = 0..* # ordering =
sub attributeLink ($) { my ($self) = @_; my $x = $self->{'attributeLink'}; # confess("Container for attributeLink $x is not a blessed ref: " . Data::Dumper->new([ $self ], [qw($self)])->Maxdepth(2)->Dump()) if $x && ref($x) !~ /::/; wantarray ? ($x ? $x->members() : ()) : [ $x ? $x->members() : () ]; }
sub set_attributeLink ($@) { my ($self, @val) = @_; $self->clear_attributeLink; $self->add_attributeLink(@val); }
sub add_attributeLink ($@) { my ($self, @val) = @_; my $x = $self->{'attributeLink'} ||= Set::Object->new(); my $old; # Place holder for other MACRO. for my $val ( @val ) { # Recursion lock next if $x->includes($val); $self->__use('UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink')->__typecheck($val, "UMMF::UML_1_5::Foundation::Core::Attribute.attributeLink"); # Recursion lock $x->insert($val); # weaken? # Remove and add associations with other ends. $old->remove_attribute($self) if $old; $val->add_attribute($self) if $val; } $self; }
sub remove_attributeLink ($@) { my ($self, @val) = @_; my $x = $self->{'attributeLink'} ||= Set::Object->new(); for my $old ( @val ) { # Recursion lock next unless $x->includes($old); my $val = $old; $self->__use('UMMF::UML_1_5::Behavioral_Elements::Common_Behavior::AttributeLink')->__typecheck($val, "UMMF::UML_1_5::Foundation::Core::Attribute.attributeLink"); # Recursion lock $x->remove($old); $val = undef; # Remove associations with other ends. $old->remove_attribute($self) if $old; $val->add_attribute($self) if $val; ; } $self; }
sub clear_attributeLink ($) { my ($self) = @_; my $x = $self->{'attributeLink'} ||= Set::Object->new(); my $val; # Place holder for other MACRO. $self->{'attributeLink'} = Set::Object->new(); # Recursion lock for my $old ( $x->members() ) { # Recursion lock # Remove associations with other ends. $old->remove_attribute($self) if $old; $val->add_attribute($self) if $val; ; } $self; }
sub count_attributeLink ($) { my ($self) = @_; my $x = $self->{'attributeLink'}; defined $x ? $x->size : 0; } # End of Class Attribute
############################################################################ 1; # is true! ############################################################################ ### Keep these comments at end of file: kstephens@users.sourceforge.net 2003/04/06 ### ### Local Variables: ### ### mode:perl ### ### perl-indent-level:2 ### ### perl-continued-statement-offset:0 ### ### perl-brace-offset:0 ### ### perl-label-offset:0 ### ### End: ###