You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

FOPEventListenerProxy.java 2.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements. See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License. You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. /* $Id$ */
  18. package org.apache.fop.events;
  19. import org.apache.fop.apps.FOUserAgent;
  20. import org.apache.fop.events.model.EventSeverity;
  21. import org.apache.fop.fo.FOValidationEventProducer;
  22. import org.apache.fop.layoutmgr.BlockLevelEventProducer;
  23. /**
  24. * EventListener proxy that inspects all events and adjusts severity levels where necessary.
  25. * For validation events, it reacts on each event based on the strict validation setting in
  26. * the user agent.
  27. * For layout events, it reduces the default severity level if FOP signals that it can recover
  28. * from the event.
  29. */
  30. public class FOPEventListenerProxy implements EventListener {
  31. private static final String FOVALIDATION_EVENT_ID_PREFIX
  32. = FOValidationEventProducer.class.getName();
  33. private static final String BLOCK_LEVEL_EVENT_ID_PREFIX
  34. = BlockLevelEventProducer.class.getName();
  35. private EventListener delegate;
  36. private FOUserAgent userAgent;
  37. /**
  38. * Main constructor.
  39. * @param delegate the event listener to delegate events to
  40. * @param userAgent the FO user agent
  41. */
  42. public FOPEventListenerProxy(EventListener delegate, FOUserAgent userAgent) {
  43. this.delegate = delegate;
  44. this.userAgent = userAgent;
  45. }
  46. /** {@inheritDoc} */
  47. public synchronized void processEvent(Event event) {
  48. if (event.getEventID().startsWith(FOVALIDATION_EVENT_ID_PREFIX)) {
  49. Boolean canRecover = (Boolean)event.getParam("canRecover");
  50. if (Boolean.TRUE.equals(canRecover) && !userAgent.validateStrictly()) {
  51. //Reduce severity if FOP can recover
  52. event.setSeverity(EventSeverity.WARN);
  53. }
  54. } else if (event.getEventID().startsWith(BLOCK_LEVEL_EVENT_ID_PREFIX)) {
  55. Boolean canRecover = (Boolean)event.getParam("canRecover");
  56. if (Boolean.TRUE.equals(canRecover)) {
  57. //Reduce severity if FOP can recover
  58. event.setSeverity(EventSeverity.WARN);
  59. }
  60. }
  61. this.delegate.processEvent(event);
  62. }
  63. }