[8962] | 1 | /*
|
---|
| 2 | * MacroResolver.java
|
---|
| 3 | * Copyright (C) 2005 New Zealand Digital Library, http://www.nzdl.org
|
---|
| 4 | *
|
---|
| 5 | * This program is free software; you can redistribute it and/or modify
|
---|
| 6 | * it under the terms of the GNU General Public License as published by
|
---|
| 7 | * the Free Software Foundation; either version 2 of the License, or
|
---|
| 8 | * (at your option) any later version.
|
---|
| 9 | *
|
---|
| 10 | * This program is distributed in the hope that it will be useful,
|
---|
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 13 | * GNU General Public License for more details.
|
---|
| 14 | *
|
---|
| 15 | * You should have received a copy of the GNU General Public License
|
---|
| 16 | * along with this program; if not, write to the Free Software
|
---|
| 17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
---|
| 18 | */
|
---|
| 19 | package org.greenstone.gsdl3.util;
|
---|
| 20 |
|
---|
| 21 | import java.util.ArrayList;
|
---|
| 22 |
|
---|
| 23 | import org.w3c.dom.Element;
|
---|
| 24 | import org.w3c.dom.NodeList;
|
---|
| 25 |
|
---|
| 26 |
|
---|
| 27 | abstract public class MacroResolver {
|
---|
| 28 |
|
---|
| 29 | public static final String SCOPE_TEXT = "text";
|
---|
| 30 | public static final String SCOPE_META = "metadata";
|
---|
| 31 | public static final String SCOPE_ALL = "all";
|
---|
| 32 |
|
---|
| 33 | public static final int TYPE_TEXT = 0;
|
---|
| 34 | public static final int TYPE_META = 1;
|
---|
| 35 | public static final int TYPE_DICT = 2;
|
---|
| 36 |
|
---|
[25635] | 37 | protected ArrayList<Macro> text_macros = null;
|
---|
| 38 | protected ArrayList<Macro> metadata_macros = null;
|
---|
[8962] | 39 |
|
---|
| 40 | String lang = null;
|
---|
| 41 |
|
---|
| 42 | public MacroResolver() {
|
---|
[25635] | 43 | this.text_macros = new ArrayList<Macro>();
|
---|
| 44 | this.metadata_macros = new ArrayList<Macro>();
|
---|
[8962] | 45 | }
|
---|
[11263] | 46 |
|
---|
[8962] | 47 |
|
---|
[14533] | 48 | public void setSiteDetails(String site_address, String cluster_name, String library_name) {
|
---|
[11263] | 49 | if (site_address != null) {
|
---|
| 50 | addMacro(TYPE_TEXT, "_httpsite_", site_address, SCOPE_ALL, false);
|
---|
| 51 | }
|
---|
| 52 | if (cluster_name != null) {
|
---|
| 53 | addMacro(TYPE_TEXT, "_clustername_", cluster_name, SCOPE_ALL, false);
|
---|
| 54 | }
|
---|
[14533] | 55 | if (library_name!=null){
|
---|
| 56 | addMacro(TYPE_TEXT, "_libraryname_", library_name, SCOPE_ALL, false);
|
---|
| 57 | }
|
---|
[11263] | 58 | }
|
---|
| 59 |
|
---|
| 60 | public void addMacro(int type, String macro, String text_or_metadata, String scope, boolean resolve) {
|
---|
[8962] | 61 | Macro m = new Macro();
|
---|
| 62 | m.type = type;
|
---|
| 63 | m.macro = macro;
|
---|
| 64 | m.text = text_or_metadata;
|
---|
[11263] | 65 | m.resolve = resolve;
|
---|
[8962] | 66 | addMacro(m, scope);
|
---|
| 67 | }
|
---|
| 68 |
|
---|
[11263] | 69 | public void addMacro(int type, String macro, String bundle, String key, String scope, boolean resolve) {
|
---|
[8962] | 70 | Macro m = new Macro();
|
---|
| 71 | m.type = type;
|
---|
| 72 | m.macro = macro;
|
---|
| 73 | m.bundle = bundle;
|
---|
| 74 | m.key = key;
|
---|
[11263] | 75 | m.resolve = resolve;
|
---|
[8962] | 76 | addMacro(m, scope);
|
---|
| 77 | }
|
---|
| 78 |
|
---|
| 79 | public void addMacros(Element replace_list_elem) {
|
---|
[25300] | 80 | NodeList replaces = replace_list_elem.getElementsByTagName(GSXML.REPLACE_ELEM);
|
---|
[8962] | 81 | for (int i=0; i<replaces.getLength(); i++) {
|
---|
| 82 | Element e = (Element)replaces.item(i);
|
---|
| 83 | String scope = e.getAttribute("scope");
|
---|
| 84 | if (scope.equals("")) {
|
---|
| 85 | scope = SCOPE_ALL;
|
---|
| 86 | }
|
---|
[11263] | 87 | boolean resolve = true;
|
---|
| 88 | String resolve_str = e.getAttribute("resolve");
|
---|
| 89 | if (resolve_str.equals("false")) {
|
---|
| 90 | resolve = false;
|
---|
| 91 | }
|
---|
[8962] | 92 | String from = e.getAttribute("macro");
|
---|
| 93 | String to = e.getAttribute("text");
|
---|
| 94 | if (!to.equals("")) {
|
---|
[11263] | 95 | addMacro(TYPE_TEXT, from, to, scope, resolve);
|
---|
[8962] | 96 | } else {
|
---|
| 97 | String meta = e.getAttribute("metadata");
|
---|
| 98 | if (!meta.equals("")) {
|
---|
[11263] | 99 | addMacro(TYPE_META, from, meta, scope, resolve);
|
---|
[8962] | 100 | } else {
|
---|
| 101 | String key = e.getAttribute("key");
|
---|
| 102 | String bundle = e.getAttribute("bundle");
|
---|
[11263] | 103 | addMacro(TYPE_DICT, from, bundle, key, scope, resolve);
|
---|
[8962] | 104 | }
|
---|
[11263] | 105 | }
|
---|
[8962] | 106 | }
|
---|
| 107 |
|
---|
| 108 | }
|
---|
| 109 |
|
---|
| 110 | protected void addMacro(Macro m, String scope) {
|
---|
| 111 |
|
---|
| 112 | if (scope.equals(SCOPE_TEXT)) {
|
---|
| 113 | this.text_macros.add(m);
|
---|
| 114 | }
|
---|
| 115 | else if (scope.equals(SCOPE_META)) {
|
---|
| 116 | this.metadata_macros.add(m);
|
---|
| 117 | }
|
---|
| 118 | else if (scope.equals(SCOPE_ALL)) {
|
---|
| 119 | this.text_macros.add(m);
|
---|
| 120 | this.metadata_macros.add(m);
|
---|
| 121 |
|
---|
| 122 | }
|
---|
| 123 |
|
---|
| 124 | }
|
---|
| 125 |
|
---|
| 126 | abstract public String resolve(String text, String lang, String scope,
|
---|
| 127 | String doc_oid);
|
---|
| 128 |
|
---|
| 129 | protected class Macro {
|
---|
| 130 |
|
---|
[11263] | 131 | /** type of replacement: TEXT, METADATA, DICTIONARY */
|
---|
[8962] | 132 | public int type;
|
---|
[11263] | 133 | /** the macro to replace */
|
---|
[8962] | 134 | public String macro = null;
|
---|
[11263] | 135 | /** If text type, holds the text to replace with. If metadata type, holds the metadata name */
|
---|
| 136 | public String text = null;
|
---|
| 137 | /** If dictionary type, holds the key to look up in the dictionary */
|
---|
[8962] | 138 | public String key = null;
|
---|
[11263] | 139 | /** If dictionary type, holds the resource bundle name */
|
---|
[8962] | 140 | public String bundle = null;
|
---|
[11263] | 141 | /** If true, will try to resolve macros in the replacement text */
|
---|
| 142 | public boolean resolve = true;
|
---|
[8962] | 143 |
|
---|
| 144 | }
|
---|
| 145 |
|
---|
| 146 | }
|
---|