Пример #1
0
 public TemplateModel get(String key) throws TemplateModelException {
   if (size() == 1) {
     NodeModel nm = (NodeModel) get(0);
     return nm.get(key);
   }
   if (key.startsWith("@@")
       && (key.equals("@@markup") || key.equals("@@nested_markup") || key.equals("@@text"))) {
     StringBuffer result = new StringBuffer();
     for (int i = 0; i < size(); i++) {
       NodeModel nm = (NodeModel) get(i);
       TemplateScalarModel textModel = (TemplateScalarModel) nm.get(key);
       result.append(textModel.getAsString());
     }
     return new SimpleScalar(result.toString());
   }
   if (StringUtil.isXMLID(key)
       || ((key.startsWith("@") && StringUtil.isXMLID(key.substring(1))))
       || key.equals("*")
       || key.equals("**")
       || key.equals("@@")
       || key.equals("@*")) {
     NodeListModel result = new NodeListModel(contextNode);
     for (int i = 0; i < size(); i++) {
       NodeModel nm = (NodeModel) get(i);
       if (nm instanceof ElementModel) {
         TemplateSequenceModel tsm = (TemplateSequenceModel) ((ElementModel) nm).get(key);
         if (tsm != null) {
           int size = tsm.size();
           for (int j = 0; j < size; j++) {
             result.add(tsm.get(j));
           }
         }
       }
     }
     if (result.size() == 1) {
       return result.get(0);
     }
     return result;
   }
   XPathSupport xps = getXPathSupport();
   if (xps != null) {
     Object context = (size() == 0) ? null : rawNodeList();
     return xps.executeQuery(context, key);
   }
   throw new TemplateModelException(
       "Key: '"
           + key
           + "' is not legal for a node sequence ("
           + this.getClass().getName()
           + "). This node sequence contains "
           + size()
           + " node(s). "
           + "Some keys are valid only for node sequences of size 1. "
           + "If you use Xalan (instead of Jaxen), XPath expression keys work only with "
           + "node lists of size 1.");
 }
Пример #2
0
  public static void main(String[] args) throws Exception {

    /* You should do this ONLY ONCE in the whole application life-cycle: */

    /* Create and adjust the configuration singleton */
    Configuration cfg = new Configuration(Configuration.VERSION_2_3_22);
    cfg.setDirectoryForTemplateLoading(new File("/Users/ian.goldsmith/projects/freemarker"));
    cfg.setDefaultEncoding("UTF-8");
    cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);

    /*
     * You usually do these for MULTIPLE TIMES in the application
     * life-cycle:
     */

    /* Create a data-model */
    Map message = new HashMap();
    message.put(
        "contentAsXml",
        freemarker.ext.dom.NodeModel.parse(
            new File("/Users/ian.goldsmith/projects/freemarker/test.xml")));

    Map root = new HashMap();
    root.put("message", message);

    /* Get the template (uses cache internally) */
    Template temp = cfg.getTemplate("testxml.ftl");

    /* Merge data-model with template */
    Writer out = new OutputStreamWriter(System.out);
    temp.process(root, out);
    // Note: Depending on what `out` is, you may need to call `out.close()`.
    // This is usually the case for file output, but not for servlet output.
  }
Пример #3
0
  /**
   * Constructor
   *
   * @throws ParserConfigurationException
   * @throws SAXException
   * @throws IOExeption si no puede leer fichero properties
   */
  public GeneradorHtml() {

    try {
      java.io.InputStream is = this.getClass().getResourceAsStream("/entregar.properties");
      if (is != null) props.load(is);
      File templates = new File(props.getProperty("carpeta.templates"));
      if (!templates.exists())
        logger.debug("la carptea de templates no existe.... imposible crear los htmls");
      cfg.setDirectoryForTemplateLoading(templates);

      root.put("noframesmensaje", "Esta página utiliza frames pero su navegador no los soporta");
      root.put("enlaceCabecera", "Enlace con Cabecera");
      root.put("enlaceMenu", "Enlace con Menu");
      root.put("enlaceContenido", "Enlace con Contenido");
      root.put("enlace", "Enlace con pagina");
      root.put("redes", "red.es");
      root.put("comunidad", "Comunidad de Madrid");
      root.put("contenido", "Contenido");
      root.put("contenidoPrincipal", "Contenido Principal");
      root.put("salir", "Cerrar Ventana");
      root.put("siguiente", "Ver Siguiente");
      root.put("anterior", "Ver Anterior");
      root.put("infSiguiente", "Informe Siguiente");
      root.put("infAnterior", "Informe Anterior");

      NodeModel.useDefaultXPathSupport();
      cfg.setObjectWrapper(new DefaultObjectWrapper());
    } catch (Exception e) {
      logger.error("No se pudo cargar el fichero properties");
    }
  }
Пример #4
0
 XPathSupport getXPathSupport() throws TemplateModelException {
   if (xpathSupport == null) {
     if (contextNode != null) {
       xpathSupport = contextNode.getXPathSupport();
     } else if (size() > 0) {
       xpathSupport = ((NodeModel) get(0)).getXPathSupport();
     }
   }
   return xpathSupport;
 }
Пример #5
0
  public NodeModel getXmlNodeModel() {
    NodeModel nodeModel = null;

    try {
      nodeModel = NodeModel.parse(new InputSource(new StringReader(getXml())));
    } catch (Throwable err) {
      logger.error(err);
    }

    return nodeModel;
  }
Пример #6
0
  /**
   * método que permite verificar si el ODE tiene metadatos.. ya sea integrados en el manifest o
   * externos al mismo.
   *
   * @return String con tres posibles valores
   *     <ul>
   *       <li>null . - si el ODE no tiene metadatos
   *       <li>vacio . - si el ODE tiene metadatos integrados en el manifest
   *       <li>path al metadato. - si el ODE tiene metadatos externos que sean lomes validos </ul
   */
  private String chequearLomes() throws Exception {
    String resultado = null;
    List listaLomes = new ArrayList();

    Node nodo = modelo.getNode().getChildNodes().item(0);
    NodeModel.simplify(nodo);
    boolean terminado = false;

    NodeList hijos = nodo.getChildNodes();
    for (int i = 0; i < hijos.getLength() && !terminado; i++) {
      Node child = hijos.item(i);
      if (child.getLocalName() != null && child.getLocalName().equals("metadata")) {
        NodeList hijos2 = child.getChildNodes();
        for (int j = 0; j < hijos2.getLength() && !terminado; j++) {
          Node child2 = hijos2.item(j);
          if (child2.getLocalName() != null && child2.getLocalName().equals("lom")) {
            resultado = "";
            terminado = true;
          }
          if (child2.getLocalName() != null && child2.getLocalName().equals("location")) {
            listaLomes.add(child2.getFirstChild().getNodeValue());
          }
        }
      } // metadata
    }

    if (resultado == null
        && listaLomes.size() > 0) { // busco en la lista de nodos externos al primero que sea lomes
      boolean encontrado = false;
      for (Iterator iter = listaLomes.iterator(); iter.hasNext() && !encontrado; ) {
        String path = (String) iter.next();
        if (chequearTipoLomesExterno(path)) {
          resultado = path;
          encontrado = true;
        }
      }
    }

    return resultado;
  }
Пример #7
0
 static void setFreeMarkerXPathEngine(String xpathEngine) throws IllegalConfigurationException {
   if (xpathEngine.equals(Engine.XPATH_ENGINE_DONT_SET)) {; // do nothing
   } else if (xpathEngine.equals(Engine.XPATH_ENGINE_DEFAULT)) {
     NodeModel.useDefaultXPathSupport();
   } else if (xpathEngine.equals(Engine.XPATH_ENGINE_XALAN)) {
     try {
       NodeModel.useXalanXPathSupport();
     } catch (Exception e) {
       throw new IllegalConfigurationException("Failed to use Xalan XPath engine.", e);
     }
   } else if (xpathEngine.equals(Engine.XPATH_ENGINE_JAXEN)) {
     try {
       NodeModel.useJaxenXPathSupport();
     } catch (Exception e) {
       throw new IllegalConfigurationException("Failed to use Jaxen XPath engine.", e);
     }
   } else {
     Class cl;
     try {
       cl = MiscUtil.classForName(xpathEngine);
     } catch (ClassNotFoundException e) {
       throw new IllegalConfigurationException(
           "Custom XPath engine adapter class "
               + StringUtil.jQuote(xpathEngine)
               + " not found. "
               + "Note that the reserved names are: "
               + StringUtil.jQuote(Engine.XPATH_ENGINE_DONT_SET)
               + ", "
               + StringUtil.jQuote(Engine.XPATH_ENGINE_DEFAULT)
               + ", "
               + StringUtil.jQuote(Engine.XPATH_ENGINE_XALAN)
               + ", "
               + StringUtil.jQuote(Engine.XPATH_ENGINE_JAXEN)
               + ".",
           e);
     }
     NodeModel.setXPathSupportClass(cl);
   }
 }
Пример #8
0
  /**
   * metodo que permite verificar si un fichero lomes externo es un fichero lomes
   *
   * @param lomesExterno path al fichero xml con los metadatos
   * @return
   *     <ul>
   *       <li>true .- si es un lomes
   *       <li>false.- si no es un lomes
   *     </ul>
   */
  private boolean chequearTipoLomesExterno(String lomesExterno) throws Exception {
    boolean resultado = false;

    NodeModel modeloExterno = null;
    try {
      modeloExterno = NodeModel.parse(new File(pathOde + "/" + lomesExterno));
      Node nodo = modeloExterno.getNode().getChildNodes().item(0);
      if (nodo != null
          && nodo.getNamespaceURI() != null
          && nodo.getNamespaceURI().equals("http://ltsc.ieee.org/xsd/LOM")) {
        resultado = true;
      }

    } catch (Exception e) {
      if (logger.isDebugEnabled()) {
        logger.debug(
            "Error en GeneradorHTML:chequearTipoLomesExterno .. problemas al leer fichero lomes externo: "
                + e.getMessage());
      }
      throw e;
    }
    return resultado;
  }
Пример #9
0
  /**
   * Método público que permite generar fichero de metadatos en carpeta separada. Comprueba si el
   * fichero manifest tiene un lomes integrado o un metadato externo. si el ODE no tiene metadatos..
   * no genera nada
   *
   * @param pathOde path del ODE que se desea exportar
   * @param dirDestino directorio donde se va a copiar la catalogacion lomes
   * @param subdirDestino target subdirectory
   * @throws Exception
   */
  public void obtenerLOMES(
      String pathOde, String dirDestino, String subdirDestino, String lomFileName)
      throws Exception {
    this.pathOde = pathOde;
    this.dirDestino = dirDestino;

    crearCarpeta(dirDestino + File.separator + subdirDestino);

    modelo = NodeModel.parse(new File(pathOde + MANIFEST));
    root.put("doc", modelo);

    pathLomesExterno = chequearLomes();
    obtenerLOMES(subdirDestino + File.separator + lomFileName);
  }
Пример #10
0
  /**
   * metodo que permite generar los ficheros html necesarios para visualizar el ODE como html
   *
   * @param pathOde path donde se encuentra el ODE que se desea exportar
   * @param dirDestino directorio donde se van a generar los ficheros html
   * @throws Exception
   */
  public void generarFrames(String pathOde, String dirDestino) throws Exception {
    this.pathOde = pathOde;
    this.dirDestino = dirDestino;
    crearCarpeta(dirDestino + "/contenido");

    try {

      modelo = NodeModel.parse(new File(pathOde + MANIFEST));
      pathLomesExterno = chequearLomes();

      generarBlanco();
      generarContenidoFrame();
      generarContenidoIndex();
      generarMenu();
      generarCabecera();
      generarIndex();

    } catch (Exception e) {
      if (logger.isDebugEnabled()) {
        logger.debug("Error en GeneradorHTML:generarFrames .. " + e.getMessage());
      }
      throw new Exception(e);
    }
  }
Пример #11
0
  /**
   * Método para generar fichero menu.html
   *
   * @throws Exception
   */
  private void generarMenu() throws Exception {
    FileOutputStream fo = null;
    Writer out = null;
    File index = null;
    Template temp;
    try {
      modelo = NodeModel.parse(new File(pathOde + MANIFEST));
      root.put("doc", modelo);

      temp = cfg.getTemplate("menuXML.ftl");
      index = new File(dirDestino + "/contenido/menu.html");
      boolean creado = index.createNewFile();
      if (creado) {
        fo = new FileOutputStream(index);
        out = new OutputStreamWriter(fo);
        temp.process(root, out);
        out.flush();
      }

    } catch (Exception e) {

      if (logger.isDebugEnabled()) {
        logger.debug("Error en GeneradorHTML:generarMenu .. " + e.getMessage());
      }
      throw e;
    } finally {
      index = null;
      if (fo != null) {
        try {
          fo.close();
          out.close();
        } catch (IOException e) {
        }
      }
    }
  }
Пример #12
0
 NodeListModel(Node node) {
   this(NodeModel.wrap(node));
 }
Пример #13
0
 public TemplateModel wrap(Object obj) {
   if (obj instanceof NodeModel) {
     return (NodeModel) obj;
   }
   return NodeModel.wrap((Node) obj);
 }
Пример #14
0
  /**
   * Método que devuelve el título de ode en caso que existiera.. busca el título en el lomes
   * integrado en el manifest o en algun lomes externo si lo tuviera.
   *
   * @return String con el título del ode
   */
  private String obtenerTitulo() throws Exception {
    String resultado = "";
    if (pathLomesExterno == null) return resultado;
    boolean terminado = false;

    if (pathLomesExterno.equals("")) {
      Node nodo = modelo.getNode().getChildNodes().item(0);
      NodeModel.simplify(nodo);

      NodeList hijos = nodo.getChildNodes();
      for (int i = 0; i < hijos.getLength() && !terminado; i++) {
        Node child = hijos.item(i);
        if (child.getLocalName() != null && child.getLocalName().equals("metadata")) {

          NodeList hijos2 = child.getChildNodes();
          for (int j = 0; j < hijos2.getLength() && !terminado; j++) {
            Node child2 = hijos2.item(j);
            if (child2.getLocalName() != null && child2.getLocalName().equals("lom")) {

              NodeList hijos3 = child2.getChildNodes();
              for (int k = 0; k < hijos3.getLength() && !terminado; k++) {
                Node child3 = hijos3.item(k);
                if (child3.getLocalName() != null && child3.getLocalName().equals("general")) {

                  NodeList hijos4 = child3.getChildNodes();
                  for (int l = 0; l < hijos4.getLength() && !terminado; l++) {
                    Node child4 = hijos4.item(l);
                    if (child4.getLocalName() != null && child4.getLocalName().equals("title")) {

                      NodeList hijos5 = child4.getChildNodes();
                      for (int ll = 0; ll < hijos5.getLength() && !terminado; ll++) {
                        Node child5 = hijos5.item(ll);
                        if (child5.getLocalName() != null
                            && child5.getLocalName().equals("string")) {
                          resultado = child5.getFirstChild().getNodeValue();

                          terminado = true;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        } // metadata
      }
    } else {
      NodeModel modeloExterno = null;
      try {
        modeloExterno = NodeModel.parse(new File(pathOde + "/" + pathLomesExterno));

        Node nodo = modeloExterno.getNode().getChildNodes().item(0);
        NodeModel.simplify(nodo);

        NodeList hijos = nodo.getChildNodes();
        for (int i = 0; i < hijos.getLength() && !terminado; i++) {
          Node child = hijos.item(i);
          if (child.getLocalName() != null && child.getLocalName().equals("general")) {

            NodeList hijos2 = child.getChildNodes();
            for (int j = 0; j < hijos2.getLength() && !terminado; j++) {
              Node child2 = hijos2.item(j);
              if (child2.getLocalName() != null && child2.getLocalName().equals("title")) {

                NodeList hijos3 = child2.getChildNodes();
                for (int k = 0; k < hijos3.getLength() && !terminado; k++) {
                  Node child3 = hijos3.item(k);
                  if (child3.getLocalName() != null && child3.getLocalName().equals("string")) {
                    resultado = child3.getFirstChild().getNodeValue();
                    terminado = true;
                  }
                }
              }
            }
          } // metadata
        }

      } catch (Exception e) {
        if (logger.isDebugEnabled()) {
          logger.debug("Error en GeneradorHTML:obtenerTitulo .. " + e.getMessage());
        }
        throw e;
      }
    }

    return resultado;
  }