View Javadoc

1   /*
2    wsmo4j - a WSMO API and Reference Implementation
3    Copyright (c) 2005, University of Innsbruck, Austria
4    This library is free software; you can redistribute it and/or modify it under
5    the terms of the GNU Lesser General Public License as published by the Free
6    Software Foundation; either version 2.1 of the License, or (at your option)
7    any later version.
8    This library is distributed in the hope that it will be useful, but WITHOUT
9    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
10   FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
11   details.
12   You should have received a copy of the GNU Lesser General Public License along
13   with this library; if not, write to the Free Software Foundation, Inc.,
14   59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15   */
16  package org.deri.wsmo4j.io.parser.xml;
17  
18  
19  import java.util.*;
20  
21  import org.w3c.dom.*;
22  import org.wsmo.factory.*;
23  import org.wsmo.wsml.*;
24  
25  
26  /**
27   * <p>This singleton class is used to create a LogicalExpression XML Parser</p>
28   * <p>The Singleton design pattern allows to ensure that only one instance of a class
29   * is created, to provide a global point of access to the object and to allow multiple
30   * instances in the future without affecting a singleton class's clients</p>
31   * @author retkru
32   * @see org.omwg.logicalexpression.io.Parser
33   * @see <a href="http://en.wikipedia.org/wiki/Singleton_pattern">Singleton Pattern</a>
34   */
35  public class LogExprParserImpl {
36  
37      WsmoFactory factory;
38      LogicalExpressionFactory leFactory;
39      DataFactory dataFactory;
40      XMLExprParser xmlParser;
41  
42      public LogExprParserImpl(Map map){
43          if (map==null){
44              map = new HashMap();
45          }
46          Object o = map.get(Factory.WSMO_FACTORY);
47          if (o == null || ! (o instanceof WsmoFactory)) {
48              o = Factory.createWsmoFactory(new HashMap <String, Object> ());
49          }
50          factory = (WsmoFactory)o;
51          assert (factory != null);
52  
53          o = map.get(Factory.LE_FACTORY);
54          if (o == null || ! (o instanceof LogicalExpressionFactory)) {
55              o = Factory.createLogicalExpressionFactory(new HashMap <String, Object> ());
56          }
57          leFactory = (LogicalExpressionFactory)o;
58          assert (leFactory != null);
59  
60          o = map.get(Factory.DATA_FACTORY);
61          if (o == null || ! (o instanceof DataFactory)) {
62              o = Factory.createDataFactory(new HashMap <String, Object> ());
63          }
64          dataFactory = (DataFactory)o;
65          assert (dataFactory != null);
66  
67          xmlParser = new XMLExprParser(factory, leFactory, dataFactory);
68      }
69  
70      /**
71       * This method parses a XML Node.
72       * @param node
73       *            XML Element Node that will be parsed
74       * @return logical expression object model
75       * @throws IllegalArgumentException in case node is not of Type Node
76       */
77      public org.omwg.logicalexpression.LogicalExpression parse(Object node)
78              throws IllegalArgumentException, ParserException {
79          if (node instanceof Node) {
80              Element exprNode = (Element)node;
81              return xmlParser.evaluateXML(exprNode);
82          }
83          throw new IllegalArgumentException(
84                  "XML Parse Error: LogExprParser.parse requiers object of type org.w3c.dom.Node");
85      }
86  }