package org.perl6.metamodel; import java.util.*; public class Attribute { private MetaClass associated_with; private String accessor_name; private String visibility; private HashMap properties; private String label; public Attribute (MetaClass _associated_with, String _label) { this(_associated_with, _label, new HashMap()); } public Attribute (MetaClass _associated_with, String _label, HashMap _properties) { String _accessor_name = _label.substring(2, _label.length()); String _visibility = "public"; if (_label.indexOf(':') == 1) _visibility = "private"; if(!_properties.containsKey("access")) _properties.put("access","ro"); if(!_properties.containsKey("type")) _properties.put("type", null); this.associated_with = _associated_with; this.accessor_name = _accessor_name; this.visibility = _visibility; this.label = _label; this.properties = _properties; } public boolean is_ro () { return ( (String) properties.get("access") ).equals("ro"); } public boolean is_rw () { return ( (String) properties.get("access") ).equals("rw"); } public String type () { return (String) properties.get("type"); } public String label () { return label; } public boolean is_array () { return label.charAt(0) == '@'; } public boolean is_hash () { return label.charAt(0) == '%'; } public MetaClass associated_with () { return associated_with; } public String accessor_name () { return accessor_name; } public boolean is_private () { return visibility.equals("private"); } public boolean is_public () { return visibility.equals("public"); } public java.lang.Object instantiate_container () { if (this.is_array()) { return new ArrayList(); } if (this.is_hash()) { return new HashMap(); } return null; } }