View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2007 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
11   */
12  
13  package com.eviware.soapui.impl.wsdl.panels.request.components.editor.views;
14  
15  import java.beans.PropertyChangeEvent;
16  import java.beans.PropertyChangeListener;
17  import java.beans.PropertyChangeSupport;
18  import java.util.HashSet;
19  import java.util.Set;
20  
21  import com.eviware.soapui.impl.wsdl.panels.request.components.editor.XmlDocument;
22  import com.eviware.soapui.impl.wsdl.panels.request.components.editor.XmlEditor;
23  import com.eviware.soapui.impl.wsdl.panels.request.components.editor.XmlEditorView;
24  import com.eviware.soapui.impl.wsdl.panels.request.components.editor.XmlLocation;
25  import com.eviware.soapui.impl.wsdl.panels.request.components.editor.XmlLocationListener;
26  
27  /***
28   * Abstract base-class to be extended by XmlViews
29   * 
30   * @author ole.matzura
31   */
32  
33  public abstract class AbstractEditorView implements XmlEditorView, PropertyChangeListener
34  {
35  	private String title;
36  	private boolean isActive;
37  	private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport( this );
38  	private XmlDocument xmlDocument;
39  	private boolean xmlChanged;
40  	private Set<XmlLocationListener> listeners = new HashSet<XmlLocationListener>();
41  	private XmlEditor editor;
42  	
43  	public AbstractEditorView(String title, XmlEditor xmlEditor)
44  	{
45  		super();
46  		this.title = title;
47  		editor = xmlEditor;
48  		xmlChanged = false;
49  	}
50  
51  	protected PropertyChangeSupport getPropertyChangeSupport()
52  	{
53  		return propertyChangeSupport;
54  	}
55  	
56  	public boolean activate(XmlLocation location)
57  	{
58  		isActive = true;
59  		if( xmlChanged  )
60  		{
61  			setXml( xmlDocument == null ? null : xmlDocument.getXml() );
62  			xmlChanged = false;
63  		}
64  		
65  		return true;
66  	}
67  
68  	public boolean isXmlChanged()
69  	{
70  		return xmlChanged;
71  	}
72  
73  	public boolean deactivate()
74  	{
75  		isActive = false;
76  		xmlChanged = false;
77  		
78  		return true;
79  	}
80  	
81  	public boolean isActive()
82  	{
83  		return isActive;
84  	}
85  
86  	public String getTitle()
87  	{
88  		return title;
89  	}
90  
91  	public void setTitle( String title )
92  	{
93  		String oldTitle = this.title;
94  		this.title = title;
95  		
96  		propertyChangeSupport.firePropertyChange( TITLE_PROPERTY, oldTitle, title );
97  	}
98  	
99  	public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)
100 	{
101 	   propertyChangeSupport.addPropertyChangeListener(propertyName, listener);	
102 	}
103 
104 	public void addPropertyChangeListener(PropertyChangeListener listener)
105 	{
106 		propertyChangeSupport.addPropertyChangeListener( listener );
107 	}
108 
109 	public void removePropertyChangeListener(PropertyChangeListener listener)
110 	{
111 		propertyChangeSupport.removePropertyChangeListener( listener );
112 	}
113 
114 	public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener)
115 	{
116 		propertyChangeSupport.removePropertyChangeListener( propertyName, listener );
117 	}
118 	
119 	public XmlDocument getXmlDocument()
120 	{
121 		return xmlDocument;
122 	}
123 
124 	public void setXmlDocument(XmlDocument xmlDocument)
125 	{
126 		if( this.xmlDocument != null )
127 		{
128 			this.xmlDocument.removePropertyChangeListener( XmlDocument.XML_PROPERTY, this );
129 		}
130 		
131 		this.xmlDocument = xmlDocument;
132 		
133 		if( xmlDocument != null )
134 		{
135 			this.xmlDocument.addPropertyChangeListener( XmlDocument.XML_PROPERTY, this );
136 			setXml( xmlDocument.getXml() );
137 		}
138 		else
139 		{
140 			setXml( null );
141 		}
142 		
143 		xmlChanged = false;
144 	}
145 
146 	public void propertyChange(PropertyChangeEvent evt)
147 	{
148 		if( isActive() )
149 			setXml( (String) evt.getNewValue() );
150 		else
151 			xmlChanged = true;
152 	}
153 	
154 	protected abstract void setXml( String xml );
155 
156 	public void release()
157 	{
158 		if( this.xmlDocument != null )
159 		{
160 			this.xmlDocument.removePropertyChangeListener( XmlDocument.XML_PROPERTY, this );
161 			this.xmlDocument = null;
162 		}		
163 	}
164 
165 	public void addLocationListener(XmlLocationListener listener)
166 	{
167 		listeners.add( listener );
168 	}
169 
170 	public void removeLocationListener(XmlLocationListener listener)
171 	{
172 		listeners.remove( listener );
173 	}
174 	
175 	public void fireLocationChanged( XmlLocation location )
176 	{
177 		for( XmlLocationListener listener : listeners )
178 			listener.locationChanged( location );
179 	}
180 	
181 	public XmlLocation getLocation()
182 	{
183 		return null;
184 	}
185 
186 	public void setLocation(XmlLocation location)
187 	{
188 	}
189 	
190 	public void locationChanged(XmlLocation location)
191 	{
192 	}
193 
194 	public void syncUpdates()
195 	{
196 		if( !isActive() && xmlChanged )
197 		{
198 			setXml( xmlDocument == null ? null : xmlDocument.getXml() );
199 			xmlChanged = false;
200 		}
201 	}
202 	
203 	public XmlEditor getEditor()
204 	{
205 		return editor;
206 	}
207 
208 	public void requestFocus()
209 	{
210 	}
211 }