From 0b9d88884537334433295cd5e9e2171b42514584 Mon Sep 17 00:00:00 2001 From: nickdavis Date: Fri, 6 Apr 2001 15:48:08 +0000 Subject: [PATCH] changed "NamedValues" property to ACSDtdDefinedAttributes to allow for custom editor. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268921 13f79535-47bb-0310-9956-ffa450edef68 --- .../ant/gui/acs/ACSDtdDefinedAttributes.java | 103 ++++++++++++++++++ .../ant/gui/acs/ACSDtdDefinedElement.java | 64 ++++++++--- 2 files changed, 153 insertions(+), 14 deletions(-) create mode 100644 src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedAttributes.java diff --git a/src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedAttributes.java b/src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedAttributes.java new file mode 100644 index 000000000..d732d67b3 --- /dev/null +++ b/src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedAttributes.java @@ -0,0 +1,103 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 1999, 2000 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Ant", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +package org.apache.tools.ant.gui.acs; +import org.apache.tools.ant.gui.acs.ACSDocumentType.DtdElement; +import java.util.Properties; + +/** + * Represents the attributes defined by the DTD. + * + * @version $Revision$ + * @author Nick Davisnick_home_account@yahoo.com + */ +public class ACSDtdDefinedAttributes extends Properties { + + ACSDocumentType.DtdElement _element = null; + + /** + * Default constructor + */ + public ACSDtdDefinedAttributes() { + this(null); + } + + /** + * Constructor + * + * @param element provides information about possible attributes. + */ + public ACSDtdDefinedAttributes(ACSDocumentType.DtdElement element) { + _element = element; + } + + /** + * Return the required attributes or null. + */ + public String[] getRequiredAttributes() { + if (_element == null) { + return null; + } + return _element.getAttributes().getRequiredAttributes(); + } + /** + * Return the optional attributes or null. + */ + public String[] getOptionalAttributes() { + if (_element == null) { + return null; + } + return _element.getAttributes().getOptionalAttributes(); + } +} diff --git a/src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedElement.java b/src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedElement.java index 7835501b3..45e8c6f86 100644 --- a/src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedElement.java +++ b/src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedElement.java @@ -75,6 +75,8 @@ implements ACSInfoProvider { static ACSDocumentType docType = new ACSDocumentType(); /** Our menu string */ public String[] menuString = null; + /** The DTD element we represent */ + private ACSDocumentType.DtdElement _dtdElement = null; /** * Default ctor. @@ -110,8 +112,9 @@ implements ACSInfoProvider { * * @return Name-value mappings. */ - public Properties getNamedValues() { - Properties retval = new Properties(); + public ACSDtdDefinedAttributes getNamedValues() { + ACSDtdDefinedAttributes retval = + new ACSDtdDefinedAttributes(getDtdElement()); NamedNodeMap attribs = getAttributes(); for(int i = 0, len = attribs.getLength(); i < len; i++) { @@ -128,34 +131,34 @@ implements ACSInfoProvider { * * @param attributes New attribute set. */ - public void setNamedValues(Properties props) { - // XXX this code really sucks. It is really annoying that the + public void setNamedValues(ACSDtdDefinedAttributes attributes) { + // XXX this code really sucks. It is really annoying that the // DOM interfaces don't have a general "setAttributes()" or - // "removeAllAttributes()" method, but instead make you + // "removeAllAttributes()" method, but instead make you // remove each attribute individually, or require you to figure - // out what the differences are between the two. + // out what the differences are between the two. // Although this is very inefficient, I'm taking the conceptually - // simplistic approach to this and brute force removing the existing - // set and replacing it with a brand new set. If this becomes a - // performance concern (which I doubt it will) it can be optimized + // simplistic approach to this and brute force removing the existing + // set and replacing it with a brand new set. If this becomes a + // performance concern (which I doubt it will) it can be optimized // later. - Properties old = getNamedValues(); + ACSDtdDefinedAttributes old = (ACSDtdDefinedAttributes) getNamedValues(); Enumeration enum = old.propertyNames(); while(enum.hasMoreElements()) { String name = (String) enum.nextElement(); removeAttribute(name); } - - enum = props.propertyNames(); + + enum = attributes.propertyNames(); while(enum.hasMoreElements()) { String key = (String) enum.nextElement(); - setAttribute(key, props.getProperty(key)); + setAttribute(key, attributes.getProperty(key)); } - firePropertyChange(NAMED_VALUES, old, props); + firePropertyChange(NAMED_VALUES, old, attributes); } /** @@ -211,5 +214,38 @@ implements ACSInfoProvider { } return null; } + + /** + * Adds the attributes which are required by this node. + */ + public void addRequiredAttributes() { + ACSDocumentType.DtdElement e = getDtdElement(); + if (e == null) { + return; + } + String[] attributes = e.getAttributes().getRequiredAttributes(); + if (attributes == null) { + return; + } + for(int i = 0; i < attributes.length; i++) { + if ( getAttributes().getNamedItem(attributes[i]) == null) { + // XXX should set to default? + setAttribute(attributes[i], ""); + } + } + } + + /** + * Returns the DTD element we represent + */ + private ACSDocumentType.DtdElement getDtdElement() { + if (_dtdElement != null) { + return _dtdElement; + } + + String name = getNodeName(); + _dtdElement = docType.findElement(name); + return _dtdElement; + } }