001 package org.LiveGraph.settings; 002 003 import org.LiveGraph.LiveGraph; 004 import org.LiveGraph.events.Event; 005 import org.LiveGraph.events.EventProcessingException; 006 import org.LiveGraph.events.EventProducer; 007 import org.LiveGraph.events.EventType; 008 import org.LiveGraph.events.UncheckedEventProcessingException; 009 010 /** 011 * Base class for all settings classes which can hadle observers to listen to 012 * settings events. This class handles all observer and event handling. 013 * 014 * <p style="font-size:smaller;">This product includes software developed by the 015 * <strong>LiveGraph</strong> project and its contributors.<br /> 016 * (<a href="http://www.live-graph.org" target="_blank">http://www.live-graph.org</a>)<br /> 017 * Copyright (c) 2007-2008 G. Paperin.<br /> 018 * All rights reserved. 019 * </p> 020 * <p style="font-size:smaller;">File: ObservableSettings.java</p> 021 * <p style="font-size:smaller;">Redistribution and use in source and binary forms, with or 022 * without modification, are permitted provided that the following terms and conditions are met: 023 * </p> 024 * <p style="font-size:smaller;">1. Redistributions of source code must retain the above 025 * acknowledgement of the LiveGraph project and its web-site, the above copyright notice, 026 * this list of conditions and the following disclaimer.<br /> 027 * 2. Redistributions in binary form must reproduce the above acknowledgement of the 028 * LiveGraph project and its web-site, the above copyright notice, this list of conditions 029 * and the following disclaimer in the documentation and/or other materials provided with 030 * the distribution.<br /> 031 * 3. All advertising materials mentioning features or use of this software or any derived 032 * software must display the following acknowledgement:<br /> 033 * <em>This product includes software developed by the LiveGraph project and its 034 * contributors.<br />(http://www.live-graph.org)</em><br /> 035 * 4. All advertising materials distributed in form of HTML pages or any other technology 036 * permitting active hyper-links that mention features or use of this software or any 037 * derived software must display the acknowledgment specified in condition 3 of this 038 * agreement, and in addition, include a visible and working hyper-link to the LiveGraph 039 * homepage (http://www.live-graph.org). 040 * </p> 041 * <p style="font-size:smaller;">THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY 042 * OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 043 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 044 * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 045 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 046 * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 047 * </p> 048 * 049 * @author Greg Paperin (<a href="http://www.paperin.org" target="_blank">http://www.paperin.org</a>) 050 * @version {@value org.LiveGraph.LiveGraph#version} 051 */ 052 public class ObservableSettings implements EventProducer { 053 054 public void eventProcessingFinished(Event<? extends EventType> event) { } 055 056 /** 057 * Objects of this class do not handle {@code eventProcessingException} notofications. 058 * 059 * @param event Ignored. 060 * @param exception Never actually thrown. 061 * @return {@code false}. 062 */ 063 public boolean eventProcessingException(Event<? extends EventType> event, EventProcessingException exception) { 064 return false; 065 } 066 067 public void notifyObservers(Event<? extends SettingsEvent> event) { 068 LiveGraph.application().eventManager().raiseEvent(event); 069 } 070 071 public Event<SettingsEvent> checkObservers(SettingsEvent eventType, boolean info) throws UncheckedEventProcessingException { 072 073 Class<? extends SettingsEvent> eventTypeClass = eventType.getClass(); 074 Event<SettingsEvent> event = new Event<SettingsEvent>(this, eventTypeClass, eventType, info); 075 try { 076 if (LiveGraph.application().eventManager().validateEvent(event)) 077 return event; 078 return null; 079 } catch(EventProcessingException e) { 080 throw new UncheckedEventProcessingException(e); 081 } 082 } 083 084 085 public Event<SettingsEvent> checkObservers(SettingsEvent eventType, long info) throws UncheckedEventProcessingException { 086 087 Class<? extends SettingsEvent> eventTypeClass = eventType.getClass(); 088 Event<SettingsEvent> event = new Event<SettingsEvent>(this, eventTypeClass, eventType, info); 089 try { 090 if (LiveGraph.application().eventManager().validateEvent(event)) 091 return event; 092 return null; 093 } catch(EventProcessingException e) { 094 throw new UncheckedEventProcessingException(e); 095 } 096 } 097 098 099 public Event<SettingsEvent> checkObservers(SettingsEvent eventType, double info) throws UncheckedEventProcessingException { 100 101 Class<? extends SettingsEvent> eventTypeClass = eventType.getClass(); 102 Event<SettingsEvent> event = new Event<SettingsEvent>(this, eventTypeClass, eventType, info); 103 try { 104 if (LiveGraph.application().eventManager().validateEvent(event)) 105 return event; 106 return null; 107 } catch(EventProcessingException e) { 108 throw new UncheckedEventProcessingException(e); 109 } 110 } 111 112 113 public Event<SettingsEvent> checkObservers(SettingsEvent eventType, Object info) throws UncheckedEventProcessingException { 114 115 Class<? extends SettingsEvent> eventTypeClass = eventType.getClass(); 116 Event<SettingsEvent> event = new Event<SettingsEvent>(this, eventTypeClass, eventType, info); 117 try { 118 if (LiveGraph.application().eventManager().validateEvent(event)) 119 return event; 120 return null; 121 } catch(EventProcessingException e) { 122 throw new UncheckedEventProcessingException(e); 123 } 124 } 125 126 127 public Event<SettingsEvent> checkObservers(SettingsEvent eventType, 128 boolean infoBoolean, long infoLong, double infoDouble, Object infoObject) 129 throws UncheckedEventProcessingException { 130 131 Class<? extends SettingsEvent> eventTypeClass = eventType.getClass(); 132 Event<SettingsEvent> event = new Event<SettingsEvent>(this, eventTypeClass, eventType, 133 infoBoolean, infoLong, infoDouble, infoObject); 134 try { 135 if (LiveGraph.application().eventManager().validateEvent(event)) 136 return event; 137 return null; 138 } catch(EventProcessingException e) { 139 throw new UncheckedEventProcessingException(e); 140 } 141 } 142 143 }