source: trunk/gli/src/org/greenstone/gatherer/cdm/Plugin.java@ 13177

Last change on this file since 13177 was 13177, checked in by mdewsnip, 18 years ago

No longer tries to load the options for a plugin/classifier if it has already failed.

  • Property svn:keywords set to Author Date Id Revision
File size: 7.0 KB
Line 
1/**
2 *#########################################################################
3 *
4 * A component of the Gatherer application, part of the Greenstone digital
5 * library suite from the New Zealand Digital Library Project at the
6 * University of Waikato, New Zealand.
7 *
8 * Author: John Thompson, Greenstone Digital Library, University of Waikato
9 *
10 * Copyright (C) 1999 New Zealand Digital Library Project
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 *########################################################################
26 */
27package org.greenstone.gatherer.cdm;
28
29import java.io.*;
30import java.util.*;
31import org.greenstone.gatherer.DebugStream;
32import org.greenstone.gatherer.greenstone.Plugins;
33import org.greenstone.gatherer.util.StaticStrings;
34import org.w3c.dom.*;
35
36
37/** This class is responsible for storing information from a parsed pluginfo call in such a way that it allows easy access to parsed details for the purposes of user design and specification of plugins. */
38public class Plugin
39 extends ArgumentContainer
40{
41 private String default_block_expression = "";
42 private String default_process_expression = "";
43 private boolean does_explode_metadata_databases = false;
44 private boolean loading_options_failed = false;
45
46
47 /** Constructor used in DOMProxyListModel initializations, and Library Level. Used for Base plugins (those in the list of available plugins, not ones that are in the DOMProxyList)
48 */
49 public Plugin() {
50 }
51
52
53 public Plugin(Element element, Plugin base_plugin) {
54 super(element, base_plugin);
55 }
56
57
58 /** Method to compare two plugins for ordering.
59 * We override the base method cos we compare by plugin name rather than toString()
60 */
61 public int compareTo(Object object) {
62 if(object instanceof Plugin) {
63 return name.compareTo(((Plugin)object).getName());
64 }
65 return -1;
66 }
67
68
69 /** The assigned plugin constructor.
70 * @param element the DOM Element this plugin is based upon
71 */
72 public DOMProxyListEntry create(Element element) {
73 String plugin_name = element.getAttribute(StaticStrings.TYPE_ATTRIBUTE);
74 // Determine the base plugin from the plugin name
75 Plugin base_plugin = Plugins.getPlugin(plugin_name, true);
76 Plugin plugin = new Plugin(element, base_plugin);
77 if (base_plugin == null) {
78 plugin.setAssigned(false);
79 }
80 base_plugin = null;
81 plugin_name = null;
82 return plugin;
83 }
84
85
86 public boolean didLoadingOptionsFail()
87 {
88 return loading_options_failed;
89 }
90
91
92 /** Checks whether the plugin this instance is based on processes metadata databases that can be exploded. */
93 public boolean doesExplodeMetadataDatabases()
94 {
95 Plugin base_plugin = Plugins.getPlugin(getName(), false);
96 if (base_plugin == null) {
97 return false;
98 }
99 return base_plugin.does_explode_metadata_databases;
100 }
101
102
103 /** Checks whether this plugin instance will process the specified file (given its block_exp). */
104 public boolean doesBlockFile(File file)
105 {
106 // Check the filename against the plugin's block_exp value
107 ArrayList arguments = getArguments();
108 for (int i = 0; i < arguments.size(); i++) {
109 Argument argument = (Argument) arguments.get(i);
110 if (argument.getName().equals("block_exp")) {
111 // Try the assigned value first, for when the user has manually set the value
112 String regular_expression = argument.getValue();
113 if (regular_expression == null || regular_expression.equals("")) {
114 // Not set, so use the default value
115 regular_expression = argument.getDefaultValue();
116 if (regular_expression.equals("")) {
117 continue;
118 }
119 }
120
121 if (doesFileMatchRegularExpression(file, regular_expression)) {
122 return true;
123 }
124 }
125 }
126
127 // Try the plugin's default block expression
128 if (!default_block_expression.equals("") && doesFileMatchRegularExpression(file, default_block_expression)) {
129 return true;
130 }
131
132 // This plugin will (probably) not deal with the specified file
133 return false;
134 }
135
136
137 /** Checks whether this plugin instance will process the specified file (given its process_exp). */
138 public boolean doesProcessFile(File file)
139 {
140 // Check the filename against the plugin's process_exp value
141 ArrayList arguments = getArguments();
142 for (int i = 0; i < arguments.size(); i++) {
143 Argument argument = (Argument) arguments.get(i);
144 if (argument.getName().equals("process_exp")) {
145 // Try the assigned value first, for when the user has manually set the value
146 String regular_expression = argument.getValue();
147 if (regular_expression == null || regular_expression.equals("")) {
148 // Not set, so use the default value
149 regular_expression = argument.getDefaultValue();
150 if (regular_expression.equals("")) {
151 continue;
152 }
153 }
154
155 if (doesFileMatchRegularExpression(file, regular_expression)) {
156 return true;
157 }
158 }
159 }
160
161 // Try the plugin's default process expression
162 if (!default_process_expression.equals("") && doesFileMatchRegularExpression(file, default_process_expression)) {
163 return true;
164 }
165
166 // This plugin will (probably) not deal with the specified file
167 return false;
168 }
169
170
171 private boolean doesFileMatchRegularExpression(File file, String regular_expression)
172 {
173 // The $ at the end doesn't seem to work in Java, so need to add ".*" at the start
174 if (regular_expression.startsWith("(?i)")) {
175 // Don't mess up case-insensitive matching though
176 regular_expression = "(?i)" + ".*" + regular_expression.substring("(?i)".length());
177 }
178 else {
179 regular_expression = ".*" + regular_expression;
180 }
181
182 // If the filename matches the regular expression, this plugin will deal with the file in some way
183 if (file.getName().matches(regular_expression)) {
184 return true;
185 }
186
187 return false;
188 }
189
190
191 public boolean isSeparator() {
192 return (element != null && element.getAttribute(StaticStrings.SEPARATOR_ATTRIBUTE).equals(StaticStrings.TRUE_STR));
193 }
194
195
196 public void setDefaultBlockExpression(String default_block_expression)
197 {
198 this.default_block_expression = default_block_expression;
199 }
200
201
202 public void setDefaultProcessExpression(String default_process_expression)
203 {
204 this.default_process_expression = default_process_expression;
205 }
206
207
208 public void setDoesExplodeMetadataDatabases(boolean does_explode_metadata_databases)
209 {
210 this.does_explode_metadata_databases = does_explode_metadata_databases;
211 }
212
213
214 public void setLoadingOptionsFailed()
215 {
216 this.loading_options_failed = true;
217 }
218}
Note: See TracBrowser for help on using the repository browser.