home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / InternalPEDeclaration.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  9.6 KB  |  286 lines

  1. package com.extensibility.xml;
  2.  
  3. import com.extensibility.util.Debug;
  4. import com.extensibility.util.FilteredEnumerator;
  5. import com.extensibility.util.StringUtilities;
  6. import com.extensibility.util.XASet;
  7. import java.util.Enumeration;
  8. import java.util.Vector;
  9.  
  10. public class InternalPEDeclaration extends ParameterEntityDeclaration implements AttributeDeclaration.Owner, ContentModelOwner {
  11.    static final Enumeration emptyEnumeration = new 1();
  12.    AttributeGroup attributeGroup;
  13.    ContentModel contentGroup;
  14.    Vector modelsUsed = new Vector();
  15.    Vector modelUsedBy = new Vector();
  16.    boolean changeLock = false;
  17.    InternalPEDChangeListener declChange = new InternalPEDChangeListener(this);
  18.  
  19.    public InternalPEDeclaration(String var1, Class var2) {
  20.       super(var1, "");
  21.       if (var2 == Class.forName("com.extensibility.xml.AttributeGroup")) {
  22.          this.setAttributes(new AttributeGroup(this));
  23.       } else if (var2 == Class.forName("com.extensibility.xml.ContentModelTerm")) {
  24.          this.createContentModel();
  25.       } else {
  26.          Debug.assert(false, "Unknown class");
  27.       }
  28.  
  29.    }
  30.  
  31.    public InternalPEDeclaration(String var1, String var2) {
  32.       super(var1, var2);
  33.    }
  34.  
  35.    public void setValue(String var1) {
  36.       String var2 = super.value;
  37.       super.setValue(var1);
  38.       if ((var2 == null || var2.equals("")) && !var1.equals("")) {
  39.          this.tryMakingReusable(((BaseDeclaration)this).getSchema());
  40.       }
  41.  
  42.    }
  43.  
  44.    public void tryMakingReusable(SchemaIntf var1) {
  45.    }
  46.  
  47.    protected void releaseBindings() {
  48.       if (this.contentGroup != null) {
  49.          this.contentGroup.visitTerms(new 2(this), false);
  50.       }
  51.  
  52.    }
  53.  
  54.    protected void establishBindings() {
  55.       if (this.contentGroup != null) {
  56.          this.contentGroup.visitTerms(new 3(this), false);
  57.       }
  58.  
  59.    }
  60.  
  61.    public void add(AttributeGroupMember var1) {
  62.       if (this.attributeGroup.add(var1)) {
  63.          this.updateValue();
  64.          var1.addChangeListener(this.declChange);
  65.          ((BaseDeclaration)this).fireChangeEvent(33, var1);
  66.       }
  67.  
  68.    }
  69.  
  70.    public void addDependantsToSet(XASet var1) {
  71.       Enumeration var2 = this.getOwnedAttributes();
  72.  
  73.       while(var2.hasMoreElements()) {
  74.          var1.addToSet(var2.nextElement());
  75.       }
  76.  
  77.    }
  78.  
  79.    public BaseDeclaration asDecl() {
  80.       return this;
  81.    }
  82.  
  83.    public Object clone() {
  84.       InternalPEDeclaration var1 = (InternalPEDeclaration)super.clone();
  85.       if (var1.attributeGroup != null) {
  86.          var1.attributeGroup = (AttributeGroup)var1.attributeGroup.clone(var1);
  87.          var1.attributeGroup.setOwner(var1);
  88.       }
  89.  
  90.       if (var1.contentGroup != null) {
  91.          var1.contentGroup = (ContentModel)var1.contentGroup.clone(var1);
  92.       }
  93.  
  94.       return var1;
  95.    }
  96.  
  97.    public BaseDeclaration clone(SchemaIntf var1, SchemaIntf var2, URI var3) {
  98.       InternalPEDeclaration var4 = (InternalPEDeclaration)super.clone();
  99.       if (var4.attributeGroup != null) {
  100.          var4.attributeGroup = (AttributeGroup)var4.attributeGroup.clone(var4, var1, var2);
  101.          var4.attributeGroup.setOwner(var4);
  102.       }
  103.  
  104.       if (var4.contentGroup != null) {
  105.          var4.contentGroup = (ContentModel)var4.contentGroup.clone(var4, var1, var2);
  106.       }
  107.  
  108.       ((BaseDeclaration)var4).setURI(var3);
  109.       return var4;
  110.    }
  111.  
  112.    public AttributeGroup getAttributeGroup() {
  113.       return this.attributeGroup;
  114.    }
  115.  
  116.    public AttributeGroupMember getAttributeOrGroup(String var1) {
  117.       return this.attributeGroup.getAttributeOrGroup(var1);
  118.    }
  119.  
  120.    public String getAttributesAsString(boolean var1) {
  121.       return this.attributeGroup == null ? "" : this.attributeGroup.getAttributesAsString(var1);
  122.    }
  123.  
  124.    public String getClassName() {
  125.       return "com.extensibility.xml.InternalPEDeclaration";
  126.    }
  127.  
  128.    public ContentModel getContentModel() {
  129.       return this.contentGroup;
  130.    }
  131.  
  132.    public boolean getMayBeAttrGroup() {
  133.       return this.attributeGroup != null || this.contentGroup == null;
  134.    }
  135.  
  136.    public boolean getMayBeModelGroup() {
  137.       return this.contentGroup != null || this.attributeGroup == null;
  138.    }
  139.  
  140.    public Enumeration getOwnedAttributes() {
  141.       AttributeGroup var1 = this.getAttributeGroup();
  142.       return (Enumeration)(var1 == null ? emptyEnumeration : new FilteredEnumerator(var1.getAttributes(false), Class.forName("com.extensibility.xml.AttributeDeclaration")));
  143.    }
  144.  
  145.    public String getSource() {
  146.       StringBuffer var1 = new StringBuffer(String.valueOf(String.valueOf(String.valueOf("<!ENTITY ").concat(String.valueOf(this.isPE() ? "% " : ""))).concat(String.valueOf(super.name))).concat(String.valueOf(" ")));
  147.       int var2 = var1.length() + 1;
  148.       var1.append(DTDUtilities.convertPEReferences(StringUtilities.doubleQuoted(super.value), true));
  149.       var1.append(String.valueOf(">").concat(String.valueOf(BaseDeclaration.LINE_SEPARATOR)));
  150.       return var1.toString();
  151.    }
  152.  
  153.    public boolean isPE() {
  154.       return true;
  155.    }
  156.  
  157.    public boolean isSubordinate(BaseDeclaration var1) {
  158.       return var1 instanceof AttributeDeclaration && ((AttributeDeclaration)var1).getOwner() == this;
  159.    }
  160.  
  161.    public boolean mayBeConstraint() {
  162.       if (this.contentGroup != null) {
  163.          return false;
  164.       } else if (this.attributeGroup != null) {
  165.          return false;
  166.       } else {
  167.          boolean var1 = false;
  168.  
  169.          for(int var2 = 0; var2 < super.value.length(); ++var2) {
  170.             char var3 = super.value.charAt(var2);
  171.             if (!DTDParser.isWhiteChar(var3) && !DTDParser.isNameChar(var3)) {
  172.                if (var3 != '|') {
  173.                   return false;
  174.                }
  175.  
  176.                var1 = true;
  177.             }
  178.          }
  179.  
  180.          return var1;
  181.       }
  182.    }
  183.  
  184.    public boolean mayBeText() {
  185.       if (this.contentGroup != null) {
  186.          return false;
  187.       } else {
  188.          return this.attributeGroup == null;
  189.       }
  190.    }
  191.  
  192.    public void modelStateChanged(ContentModelTerm var1, int var2, Object var3) {
  193.       for(int var4 = 0; var4 < this.modelUsedBy.size(); ++var4) {
  194.          if (this.modelUsedBy.elementAt(var4) != this) {
  195.             ((ContentModelOwner)this.modelUsedBy.elementAt(var4)).modelStateChanged(var1, var2, var3);
  196.          }
  197.       }
  198.  
  199.    }
  200.  
  201.    public boolean references(InternalPEDeclaration var1) {
  202.       if (var1 == this) {
  203.          return false;
  204.       } else if (this.getAttributeGroup() != null) {
  205.          return this.attributeGroup.contains(var1.getAttributeGroup());
  206.       } else if (this.contentGroup != null) {
  207.          return this.modelsUsed.indexOf(var1) >= 0;
  208.       } else {
  209.          return super.references(var1);
  210.       }
  211.    }
  212.  
  213.    public void remove(AttributeGroupMember var1) {
  214.       this.attributeGroup.remove(var1);
  215.       this.updateValue();
  216.       var1.removeChangeListener(this.declChange);
  217.       ((BaseDeclaration)this).fireChangeEvent(32, var1);
  218.    }
  219.  
  220.    public void setAttributes(AttributeGroup var1) {
  221.       Debug.assert(this.attributeGroup == null, "may ony be set when null");
  222.       this.attributeGroup = var1;
  223.       var1.setOwner(this);
  224.    }
  225.  
  226.    public void clearAttributes() {
  227.       this.attributeGroup = null;
  228.    }
  229.  
  230.    public ContentModel createContentModel() {
  231.       this.contentGroup = new ContentModel(this);
  232.       return this.contentGroup;
  233.    }
  234.  
  235.    public void clearContentModel() {
  236.       this.contentGroup = null;
  237.    }
  238.  
  239.    public String toString() {
  240.       return this.getSource();
  241.    }
  242.  
  243.    public void unusedByNotify(ContentModelOwner var1) {
  244.       this.modelUsedBy.removeElement(var1);
  245.    }
  246.  
  247.    public void unuseNotify(ContentModelOwner var1) {
  248.       if (!this.modelsUsed.removeElement(var1)) {
  249.          Debug.assert(false, "removing a model that didn't exist");
  250.       }
  251.  
  252.    }
  253.  
  254.    public Vector updateAttributes(Vector var1) {
  255.       Vector var2 = this.attributeGroup.updateContents(var1);
  256.       ((BaseDeclaration)this).fireChangeEvent(45, (Object)null);
  257.       return var2;
  258.    }
  259.  
  260.    public void updateValue() {
  261.       if (this.contentGroup != null) {
  262.          super.value = this.contentGroup.getSource(true);
  263.          ((BaseDeclaration)this).fireChangeEvent(43, this.contentGroup);
  264.       } else if (this.attributeGroup != null) {
  265.          super.value = this.attributeGroup.getSource(1);
  266.          ((BaseDeclaration)this).fireChangeEvent(44, this.attributeGroup);
  267.       } else {
  268.          Debug.assert(false, "can only update value when cm or attrs are non-null");
  269.       }
  270.  
  271.    }
  272.  
  273.    public void usedByNotify(ContentModelOwner var1) {
  274.       if (var1 == this) {
  275.          Debug.trace("adding self!");
  276.       } else {
  277.          this.modelUsedBy.addElement(var1);
  278.       }
  279.  
  280.    }
  281.  
  282.    public void useNotify(ContentModelOwner var1) {
  283.       this.modelsUsed.addElement(var1);
  284.    }
  285. }
  286.