001    /*
002     * Copyright (c) 2000 World Wide Web Consortium,
003     * (Massachusetts Institute of Technology, Institut National de
004     * Recherche en Informatique et en Automatique, Keio University). All
005     * Rights Reserved. This program is distributed under the W3C's Software
006     * Intellectual Property License. This program is distributed in the
007     * hope that it will be useful, but WITHOUT ANY WARRANTY; without even
008     * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
009     * PURPOSE.
010     * See W3C License http://www.w3.org/Consortium/Legal/ for more details.
011     *
012     * $Id: SelectorFactoryImpl.java,v 1.1.1.1 2006/04/23 14:51:53 taqua Exp $
013     */
014    package org.w3c.flute.parser.selectors;
015    
016    import org.w3c.css.sac.SelectorFactory;
017    import org.w3c.css.sac.ConditionalSelector;
018    import org.w3c.css.sac.NegativeSelector;
019    import org.w3c.css.sac.SimpleSelector;
020    import org.w3c.css.sac.ElementSelector;
021    import org.w3c.css.sac.CharacterDataSelector;
022    import org.w3c.css.sac.ProcessingInstructionSelector;
023    import org.w3c.css.sac.SiblingSelector;
024    import org.w3c.css.sac.DescendantSelector;
025    import org.w3c.css.sac.Selector;
026    import org.w3c.css.sac.Condition;
027    import org.w3c.css.sac.CSSException;
028    
029    /**
030     * @version $Revision: 1.1.1.1 $
031     * @author  Philippe Le Hegaret
032     */
033    public class SelectorFactoryImpl implements SelectorFactory {
034    
035        /**
036         * Creates a conditional selector.
037         * 
038         * @param selector a selector.
039         * @param condition a condition
040         * @return the conditional selector.
041         * @exception CSSException If this selector is not supported.
042         */    
043        public ConditionalSelector createConditionalSelector(SimpleSelector selector,
044                                                      Condition condition) 
045                throws CSSException {
046      return new ConditionalSelectorImpl(selector, condition);
047        }
048    
049        /**
050         * Creates an any node selector.
051         * 
052         * @return the any node selector.
053         * @exception CSSException If this selector is not supported.
054         */    
055        public SimpleSelector createAnyNodeSelector() throws CSSException {
056            throw new CSSException(CSSException.SAC_NOT_SUPPORTED_ERR);
057        }
058    
059        /**
060         * Creates an root node selector.
061         * 
062         * @return the root node selector.
063         * @exception CSSException If this selector is not supported.
064         */    
065        public SimpleSelector createRootNodeSelector() throws CSSException {
066            throw new CSSException(CSSException.SAC_NOT_SUPPORTED_ERR);
067        }
068    
069        /**
070         * Creates an negative selector.
071         * 
072         * @param selector a selector.
073         * @return the negative selector.
074         * @exception CSSException If this selector is not supported.
075         */    
076        public NegativeSelector createNegativeSelector(SimpleSelector selector) 
077                throws CSSException {
078            throw new CSSException(CSSException.SAC_NOT_SUPPORTED_ERR);
079        }
080    
081        /**
082         * Creates an element selector.
083         * 
084         * @param namespaceURI the <a href="http://www.w3.org/TR/REC-xml-names/#dt-NSName">namespace
085         *                     URI</a> of the element selector.
086         * @param tagName the <a href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local
087         *        part</a> of the element name. <code>NULL</code> if this element
088         *        selector can match any element.</p>
089         * @return the element selector
090         * @exception CSSException If this selector is not supported.
091         */    
092        public ElementSelector createElementSelector(String namespaceURI, String localName) 
093                throws CSSException {
094            if (namespaceURI != null) {
095                throw new CSSException(CSSException.SAC_NOT_SUPPORTED_ERR);
096            } else {
097                return new ElementSelectorImpl(localName);
098            }
099        }
100    
101        /**
102         * Creates a text node selector.
103         * 
104         * @param data the data
105         * @return the text node selector
106         * @exception CSSException If this selector is not supported.
107         */    
108        public CharacterDataSelector createTextNodeSelector(String data)
109                throws CSSException {
110            throw new CSSException(CSSException.SAC_NOT_SUPPORTED_ERR);
111        }
112    
113        /**
114         * Creates a cdata section node selector.
115         * 
116         * @param data the data
117         * @return the cdata section node selector
118         * @exception CSSException If this selector is not supported.
119         */    
120        public CharacterDataSelector createCDataSectionSelector(String data)
121                throws CSSException {
122            throw new CSSException(CSSException.SAC_NOT_SUPPORTED_ERR);
123        }
124    
125        /**
126         * Creates a processing instruction node selector.
127         * 
128         * @param target the target
129         * @param data the data
130         * @return the processing instruction node selector
131         * @exception CSSException If this selector is not supported.
132         */    
133        public ProcessingInstructionSelector 
134            createProcessingInstructionSelector(String target,
135                                                String data)
136                throws CSSException {
137            throw new CSSException(CSSException.SAC_NOT_SUPPORTED_ERR);
138        }
139    
140        /**
141         * Creates a comment node selector.
142         * 
143         * @param data the data
144         * @return the comment node selector
145         * @exception CSSException If this selector is not supported.
146         */    
147        public CharacterDataSelector createCommentSelector(String data)
148                throws CSSException {
149            throw new CSSException(CSSException.SAC_NOT_SUPPORTED_ERR);
150        }
151    
152        /**
153         * Creates a pseudo element selector.
154         * 
155         * @param pseudoName the pseudo element name. <code>NULL</code> if this
156         *                   element selector can match any pseudo element.</p>
157         * @return the element selector
158         * @exception CSSException If this selector is not supported.
159         */    
160        public ElementSelector createPseudoElementSelector(String namespaceURI, 
161                                                    String pseudoName) 
162                throws CSSException {
163            if (namespaceURI != null) {
164                throw new CSSException(CSSException.SAC_NOT_SUPPORTED_ERR);
165            } else {
166                return new PseudoElementSelectorImpl(pseudoName);
167            }
168        }
169    
170        /**
171         * Creates a descendant selector.
172         *
173         * @param parent the parent selector
174         * @param descendant the descendant selector
175         * @return the combinator selector.
176         * @exception CSSException If this selector is not supported.
177         */    
178        public DescendantSelector createDescendantSelector(Selector parent,
179                                                           SimpleSelector descendant)
180                throws CSSException {
181            return new DescendantSelectorImpl(parent, descendant);
182        }
183    
184        /**
185         * Creates a child selector.
186         *
187         * @param parent the parent selector
188         * @param child the child selector
189         * @return the combinator selector.
190         * @exception CSSException If this selector is not supported.
191         */    
192        public DescendantSelector createChildSelector(Selector parent,
193                                                      SimpleSelector child)
194                throws CSSException {
195            return new ChildSelectorImpl(parent, child);
196        }
197    
198        /**
199         * Creates a direct adjacent selector.
200         *
201         * @param child the child selector
202         * @param adjacent the direct adjacent selector
203         * @return the combinator selector.
204         * @exception CSSException If this selector is not supported.
205         */
206        public SiblingSelector createDirectAdjacentSelector(short nodeType,
207                                                            Selector child,
208                                                            SimpleSelector directAdjacent)
209                throws CSSException {
210            if (nodeType != 1) {        
211                throw new CSSException(CSSException.SAC_NOT_SUPPORTED_ERR);
212            } else {
213                return new DirectAdjacentSelectorImpl(child, directAdjacent);
214            }
215        }
216    
217    }