01: /*
02: * Copyright 2004 Outerthought bvba and Schaubroeck nv
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16: package org.outerj.daisy.frontend;
17:
18: import java.util.regex.Pattern;
19: import java.util.regex.Matcher;
20:
21: public class HtmlHelper {
22: private static Pattern emptyHtml1 = Pattern.compile(".*<body/>.*",
23: Pattern.DOTALL);
24: private static Pattern emptyHtml2 = Pattern.compile(
25: ".*<body>\\s*?</body>.*", Pattern.DOTALL);
26:
27: /**
28: * Returns true if the HTML given as a string parameter is empty.
29: *
30: * <p>This is needed to detect whether a field widget with HTMLArea rendering
31: * actually contains entered text, either for validating of required parts
32: * or for avoiding storing this "empty content". This method assumes the HTML is
33: * cleaned up with the {@link org.outerj.daisy.frontend.editor.HtmlCleaningConvertor} and that in case it is empty,
34: * it only contains the html and body elements, with no extra attributes.
35: *
36: * <p>Given a specific configuration of the HtmlCleaningConvertor, we could detect
37: * empty HTML simply by a string compare, but this method is a little bit more
38: * robust to changing configurations (ie changes in amount of whitespace or
39: * in the produced output of the html cleaner).
40: *
41: * <p>Practically speaking, it works as follows:
42: * <ul>
43: * <li>If the input is null or an empty string, it is empty
44: * <li>If the input text is longer then 50 characters, assume it is not empty.
45: * <li>If the input contains <body/> or <body>...whitespace...</body> in it, it is empty
46: * <li>else, it is not empty
47: * </ul>
48: */
49: public static boolean isEmpty(String html) {
50: if (html == null)
51: return true;
52:
53: if (html.length() > 50)
54: return false;
55:
56: html = html.trim();
57: if (html.equals(""))
58: return true;
59:
60: Matcher matcher;
61:
62: matcher = emptyHtml1.matcher(html);
63: if (matcher.matches())
64: return true;
65:
66: matcher = emptyHtml2.matcher(html);
67: return matcher.matches();
68: }
69: }
|