[Mulgara-svn] r189 - trunk/src/jar/descriptor/src/java/org/mulgara/descriptor

brian at mulgara.org brian at mulgara.org
Sat Feb 24 23:44:06 UTC 2007


Author: brian
Date: 2007-02-24 17:44:05 -0600 (Sat, 24 Feb 2007)
New Revision: 189

Added:
   trunk/src/jar/descriptor/src/java/org/mulgara/descriptor/DescriptorUtil.java
Log:


Copied: trunk/src/jar/descriptor/src/java/org/mulgara/descriptor/DescriptorUtil.java (from rev 188, trunk/src/jar/descriptor/src/java/org/mulgara/descriptor/DescriptorUtility.java)
===================================================================
--- trunk/src/jar/descriptor/src/java/org/mulgara/descriptor/DescriptorUtility.java	2007-02-24 21:41:43 UTC (rev 188)
+++ trunk/src/jar/descriptor/src/java/org/mulgara/descriptor/DescriptorUtil.java	2007-02-24 23:44:05 UTC (rev 189)
@@ -0,0 +1,321 @@
+/*
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ * the License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * The Original Code is the Kowari Metadata Store.
+ *
+ * The Initial Developer of the Original Code is Plugged In Software Pty
+ * Ltd (http://www.pisoftware.com, mailto:info at pisoftware.com). Portions
+ * created by Plugged In Software Pty Ltd are Copyright (C) 2001,2002
+ * Plugged In Software Pty Ltd. All Rights Reserved.
+ *
+ * Contributor(s): N/A.
+ *
+ * [NOTE: The text of this Exhibit A may differ slightly from the text
+ * of the notices in the Source Code files of the Original Code. You
+ * should use the text of this Exhibit A rather than the text found in the
+ * Original Code Source Code for Your Modifications.]
+ *
+ */
+
+package org.mulgara.descriptor;
+
+
+// Java 2 standard packages
+import java.io.*;
+import java.net.*;
+import java.util.*;
+
+// Third party packages
+import org.apache.log4j.*;
+
+// Debugging writer
+import org.apache.axis.utils.DOM2Writer;
+
+import org.mulgara.server.EmbeddedMulgaraServer;
+
+// DOM
+import org.w3c.dom.*;
+
+/**
+ * Facade to provide old apache SOAP access through AXIS.
+ *
+ * @created 2004-04-06
+ *
+ * @author Keith Ahern
+ *
+ * @version $Revision: 1.8 $
+ *
+ * @modified $Date: 2005/01/05 04:58:11 $
+ *
+ * @maintenanceAuthor $Author: newmana $
+ *
+ * @company <A href="mailto:info at PIsoftware.com">Plugged In Software</A>
+ *
+ * @copyright &copy; 2001-2003 <A href="http://www.PIsoftware.com/">Plugged In
+ *      Software Pty Ltd</A>
+ *
+ * @licence <a href="{@docRoot}/../../LICENCE">Mozilla Public License v1.1</a>
+ */
+public class DescriptorUtil {
+
+  /**
+   * descriptor username for Mulgara access
+   */
+  final static String DESCRIPTOR_USERNAME = "descriptor";
+
+  /**
+   * descriptor password for Mulgara access
+   */
+  final static String DESCRIPTOR_PASSWORD = "ZZpj4i6p7r";
+
+  /**
+   * logging class
+   */
+  private final static Logger log =
+      Logger.getLogger(DescriptorUtil.class.getName());
+
+  /**
+   * Maintain the Descriptor for the application
+   */
+  private static DescriptorFactory factory = null;
+
+
+  /**
+   * Initatiates the servlet
+   *
+   * @param config Servlet Config
+   * @throws ServletException EXCEPTION TO DO
+   */
+  public DescriptorUtil(){
+
+    log.info("initializing the descriptor Util class");
+
+    // get a descriptor factory
+    factory = DescriptorFactory.getInstance();
+  }
+
+  /**
+   * Invokes a descriptor return the result as a string.
+   *
+   * @param params HashMap is used instead of Map because of an Axis bug
+   * @return see description.
+   * @throws Exception thrown when the descriptor has an internal exception.
+   */
+  public String invokeToString(HashMap params) throws Exception {
+
+    // if this gets set to thru reset the factory descriptors
+    boolean clearDescriptorCache = false;
+
+    String result;
+    URL descURL = null;
+    Param[] parameters = new Param[params.size()];
+    String sourceURLString = null;
+
+    // may be set if the url is relative,
+    // the source should have the full URL
+    // of the calling descriptor e.g.
+    // in a HTML
+    String url = null;
+    int i = 0;
+
+    for (Iterator pi = params.keySet().iterator(); pi.hasNext(); ) {
+
+      String key = (String) pi.next();
+      String value = (String) params.get(key);
+
+      parameters[i++] = new Param(key, value);
+
+      //Check for the descriptor url
+      if (key.equalsIgnoreCase(Descriptor.CLEAR_DESCRIPTOR_CACHE)) {
+
+        clearDescriptorCache = true;
+      }
+      else if (key.equalsIgnoreCase(Descriptor.DESCRIPTOR_SELF)) {
+
+        url = value;
+      }
+      else if (key.equalsIgnoreCase(Descriptor.DESCRIPTOR_SOURCE)) {
+
+        // we've got a _source param - above url must be relative
+        sourceURLString = value;
+      }
+    }
+
+    if (url == null) {
+
+      throw new Exception(Descriptor.DESCRIPTOR_SELF +
+                          " not set as a name value pair");
+    }
+
+    // Create Descriptor Factory
+    if (factory == null) {
+
+      factory = DescriptorFactory.getInstance();
+    }
+
+    try {
+
+      // received a clear descriptor cache command
+      if (clearDescriptorCache) {
+
+        factory.clearDescriptorCache();
+      }
+
+      try {
+
+        descURL = new URL(url);
+
+        // we have a source attribute
+      }
+      catch (MalformedURLException mue) {
+
+        descURL = Descriptor.resolveRelativeURL(url, sourceURLString);
+      }
+
+      // get a Descriptor from the Factory
+      Descriptor des = factory.getDescriptor(descURL);
+
+      // activate the descriptor...
+      result = des.processToString(parameters);
+
+      // return the descriptor
+      factory.releaseDescriptor(des);
+    }
+    catch (DescriptorException de) {
+
+      throw new Exception("Descriptor Problem", de);
+    }
+
+    // string
+    return result;
+  }
+
+
+  /**
+   * Invokes a descriptor returning an Element.
+   *
+   * @param eparams an Element containing parameters for the descriptor.
+   *      <params>
+   *
+   *      <_url>http://....</_url> <model>rmi://</model>
+   * @return Element the result of the descriptor
+   * @throws Exception thrown when the descriptor has an internal exception.
+   */
+  public Element invokeDescriptor(Element eparams) throws Exception {
+
+    if (log.isDebugEnabled()) {
+
+      log.debug("SOAP SUBMITTED PARAMS:" + DOM2Writer.nodeToString((Node)eparams, true));
+    }
+
+    // Document to store result in.
+    Document result;
+    URL descURL = null;
+    String sourceURLString = null;
+
+    // may be set if the url is relative,
+    // the source should have the full URL
+    // of the calling descriptor e.g.
+    // in a HTML
+    // Break down parameters to name value pairs in an array
+    NodeList cl = eparams.getChildNodes();
+
+    // array of the parameters
+    Param[] parameters = new Param[cl.getLength()];
+
+    // url of the descriptor to use
+    String url = null;
+
+    // if this gets set to thru reset the factory descriptors
+    boolean clearDescriptorCache = false;
+
+    // loop thru children
+    for (int i = 0; i < cl.getLength(); i++) {
+
+      Element param = (Element) cl.item(i);
+
+      // name value pairs
+      String name = param.getTagName();
+      String value = (String) param.getFirstChild().getNodeValue();
+
+      if (log.isDebugEnabled()) {
+
+        log.debug("Descriptor PARAM: name " + name + " value " + value);
+      }
+
+      parameters[i] = new Param(name, value);
+
+      //Check for the descriptor url
+      if (name.equalsIgnoreCase(Descriptor.CLEAR_DESCRIPTOR_CACHE)) {
+
+        clearDescriptorCache = true;
+      }
+      else if (name.equalsIgnoreCase(Descriptor.DESCRIPTOR_SELF)) {
+
+        url = value;
+      }
+      else if (name.equalsIgnoreCase(Descriptor.DESCRIPTOR_SOURCE)) {
+
+        // we've got a _source param - above url must be relative
+        sourceURLString = value;
+      }
+    }
+
+    if (url == null) {
+
+      throw new Exception(Descriptor.DESCRIPTOR_SELF +
+                          " not set as a name value pair");
+    }
+
+    // Create Descriptor Factory
+    if (factory == null) {
+
+      factory = DescriptorFactory.getInstance();
+    }
+
+    try {
+
+      // received a clear descriptor cache command
+      if (clearDescriptorCache) {
+
+        factory.clearDescriptorCache();
+      }
+
+      try {
+
+        descURL = new URL(url);
+
+        // we have a source attribute
+      }
+      catch (MalformedURLException mue) {
+
+        descURL = Descriptor.resolveRelativeURL(url, sourceURLString);
+      }
+
+      // get a Descriptor from the Factory
+      Descriptor des = factory.getDescriptor(descURL);
+
+      // activate the descriptor...
+      result = des.processToDocument(parameters);
+
+      // return the descriptor
+      factory.releaseDescriptor(des);
+    }
+    catch (DescriptorException de) {
+
+      de.printStackTrace();
+
+      throw new Exception("Descriptor Problem: " + de.getCause(), de);
+    }
+
+    return result.getDocumentElement();
+  }
+}




More information about the Mulgara-svn mailing list