001 //$HeadURL: svn+ssh://jwilden@svn.wald.intevation.org/deegree/base/branches/2.5_testing/src/org/deegree/model/metadata/iso19115/XMLFactory.java $
002 /*----------------------------------------------------------------------------
003 This file is part of deegree, http://deegree.org/
004 Copyright (C) 2001-2009 by:
005 Department of Geography, University of Bonn
006 and
007 lat/lon GmbH
008
009 This library is free software; you can redistribute it and/or modify it under
010 the terms of the GNU Lesser General Public License as published by the Free
011 Software Foundation; either version 2.1 of the License, or (at your option)
012 any later version.
013 This library is distributed in the hope that it will be useful, but WITHOUT
014 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
015 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
016 details.
017 You should have received a copy of the GNU Lesser General Public License
018 along with this library; if not, write to the Free Software Foundation, Inc.,
019 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020
021 Contact information:
022
023 lat/lon GmbH
024 Aennchenstr. 19, 53177 Bonn
025 Germany
026 http://lat-lon.de/
027
028 Department of Geography, University of Bonn
029 Prof. Dr. Klaus Greve
030 Postfach 1147, 53001 Bonn
031 Germany
032 http://www.geographie.uni-bonn.de/deegree/
033
034 e-mail: info@deegree.org
035 ----------------------------------------------------------------------------*/
036 package org.deegree.model.metadata.iso19115;
037
038 import java.net.URI;
039 import java.net.URL;
040 import java.util.List;
041
042 import org.deegree.datatypes.Code;
043 import org.deegree.framework.xml.XMLTools;
044 import org.deegree.ogcbase.CommonNamespaces;
045 import org.w3c.dom.Element;
046
047 /**
048 * <code>XMLFactory</code> with append methods for the various ISO 19115 elements as specified in
049 * the OWS common specification 1.0.0.
050 *
051 * @author <a href="mailto:schmitz@lat-lon.de">Andreas Schmitz</a>
052 * @author last edited by: $Author: mschneider $
053 *
054 * @version 2.0, $Revision: 18195 $, $Date: 2009-06-18 17:55:39 +0200 (Do, 18 Jun 2009) $
055 *
056 * @since 2.0
057 */
058
059 public class XMLFactory extends org.deegree.ogcbase.XMLFactory {
060
061 private static URI OWS = CommonNamespaces.OWSNS;
062
063 private static String POWS = CommonNamespaces.OWS_PREFIX + ':';
064
065 /**
066 * Appends the given <code>CitedResponsibleParty</code> object as XML.
067 *
068 * @param root
069 * @param party
070 */
071 public static void appendCitedResponsibleParty( Element root, CitedResponsibleParty party ) {
072 Element elem = XMLTools.appendElement( root, OWS, POWS + "ResponsiblePartySubsetType" );
073
074 String[] individualNames = party.getIndividualName();
075 if ( ( individualNames != null ) && ( individualNames.length != 0 ) && ( individualNames[0] != null ) )
076 XMLTools.appendElement( elem, OWS, POWS + "IndividualName", individualNames[0] );
077
078 String[] positionNames = party.getPositionName();
079 if ( ( positionNames != null ) && ( positionNames.length != 0 ) && ( positionNames[0] != null ) )
080 XMLTools.appendElement( elem, OWS, POWS + "PositionName", positionNames[0] );
081
082 RoleCode[] roles = party.getRoleCode();
083 if ( ( roles != null ) && ( roles.length != 0 ) && ( roles[0] != null ) )
084 XMLTools.appendElement( elem, OWS, POWS + "Role", roles[0].getValue() );
085
086 ContactInfo[] contactInfos = party.getContactInfo();
087 if ( ( contactInfos != null ) && ( contactInfos.length != 0 ) && ( contactInfos[0] != null ) )
088 appendContactInfo( elem, contactInfos[0] );
089 }
090
091 /**
092 * Appends the contact info.
093 *
094 * @param root
095 * @param contactInfo
096 */
097 public static void appendContactInfo( Element root, ContactInfo contactInfo ) {
098 Element elem = XMLTools.appendElement( root, OWS, POWS + "ContactInfo" );
099
100 appendPhone( elem, contactInfo.getPhone() );
101 appendAddress( elem, contactInfo.getAddress() );
102 appendOnlineResource( elem, contactInfo.getOnLineResource() );
103
104 String hours = contactInfo.getHoursOfService();
105 String instructions = contactInfo.getContactInstructions();
106
107 if ( hours != null )
108 XMLTools.appendElement( elem, OWS, POWS + "HoursOfService", hours );
109 if ( instructions != null )
110 XMLTools.appendElement( elem, OWS, POWS + "ContactInstructions", instructions );
111 }
112
113 /**
114 * Appends the phone data.
115 *
116 * @param root
117 * @param phone
118 */
119 public static void appendPhone( Element root, Phone phone ) {
120 if ( phone == null )
121 return;
122
123 Element elem = XMLTools.appendElement( root, OWS, POWS + "Phone" );
124
125 String[] voice = phone.getVoice();
126 for ( String number : voice )
127 XMLTools.appendElement( elem, OWS, POWS + "Voice", number );
128
129 String[] facsimile = phone.getFacsimile();
130 for ( String number : facsimile )
131 XMLTools.appendElement( elem, OWS, POWS + "Facsimile", number );
132 }
133
134 /**
135 * Appends the address data.
136 *
137 * @param root
138 * @param address
139 */
140 public static void appendAddress( Element root, Address address ) {
141 if ( address == null )
142 return;
143
144 Element elem = XMLTools.appendElement( root, OWS, POWS + "Address" );
145
146 String[] deliveryPoint = address.getDeliveryPoint();
147 for ( String point : deliveryPoint )
148 XMLTools.appendElement( elem, OWS, POWS + "DeliveryPoint", point );
149
150 String city = address.getCity();
151 if ( city != null )
152 XMLTools.appendElement( elem, OWS, POWS + "City", city );
153
154 String adminArea = address.getAdministrativeArea();
155 if ( adminArea != null )
156 XMLTools.appendElement( elem, OWS, POWS + "AdministrativeArea", adminArea );
157
158 String postalCode = address.getPostalCode();
159 if ( postalCode != null )
160 XMLTools.appendElement( elem, OWS, POWS + "PostalCode", postalCode );
161
162 String country = address.getCountry();
163 if ( country != null )
164 XMLTools.appendElement( elem, OWS, POWS + "Country", country );
165
166 String[] email = address.getElectronicMailAddress();
167 for ( String mail : email )
168 XMLTools.appendElement( elem, OWS, POWS + "ElectronicMailAddress", mail );
169 }
170
171 /**
172 * Appends the link.
173 *
174 * @param root
175 * @param link
176 */
177 public static void appendOnlineResource( Element root, OnlineResource link ) {
178 if ( link == null )
179 return;
180 appendOnlineResource( root, link.getLinkage().getHref() );
181 }
182
183 /**
184 * Appends the link.
185 *
186 * @param root
187 * @param link
188 */
189 public static void appendOnlineResource( Element root, URL link ) {
190 if ( link == null )
191 return;
192
193 // fix up URL to standard form
194 String url = link.toExternalForm();
195 if ( !url.toString().endsWith( "?" ) ) {
196 if ( !url.endsWith( "&" ) ) {
197 if ( url.indexOf( "?" ) == -1 )
198 url = url + "?";
199 else
200 url = url + "&";
201 }
202 }
203
204 root.setAttributeNS( "http://www.w3.org/1999/xlink", "xlink:type", "simple" );
205 root.setAttributeNS( "http://www.w3.org/1999/xlink", "xlink:href", url );
206
207 }
208
209 /**
210 * Appends an online resource in a newly created element in the OWS namespace. The new element
211 * will be named according to the tagName parameter.
212 *
213 * @param root
214 * @param link
215 * @param tagName
216 */
217 public static void appendOnlineResource( Element root, OnlineResource link, String tagName ) {
218 Element newElem = XMLTools.appendElement( root, OWS, POWS + tagName );
219 appendOnlineResource( newElem, link );
220 }
221
222 /**
223 * Appends an online resource in a newly created element in the OWS namespace. The new element
224 * will be named according to the tagName parameter.
225 *
226 * @param root
227 * @param link
228 * @param tagName
229 */
230 public static void appendOnlineResource( Element root, URL link, String tagName ) {
231 Element newElem = XMLTools.appendElement( root, OWS, POWS + tagName );
232 appendOnlineResource( newElem, link );
233 }
234
235 /**
236 * Appends the access constraint element. Please note that a lot of the information contained
237 * within will not be included in the output due to restrictions of the OWS specification.
238 *
239 * @param root
240 * @param constraints
241 */
242 public static void appendAccessConstraint( Element root, Constraints constraints ) {
243 List<String> constrList = constraints.getUseLimitations();
244 String constr = "";
245 if ( constrList.size() != 0 )
246 constr = constrList.get( 0 );
247
248 XMLTools.appendElement( root, OWS, POWS + "AccessConstraint", constr );
249 }
250
251 /**
252 * Appends an element of type CodeType with the given name and content.
253 *
254 * @param root
255 * @param tagName
256 * @param code
257 */
258 public static void appendCode( Element root, String tagName, Code code ) {
259 Element elem = XMLTools.appendElement( root, OWS, POWS + tagName, code.getCode() );
260 URI codeSpace = code.getCodeSpace();
261 if ( codeSpace != null )
262 elem.setAttribute( "codeSpace", codeSpace.toString() );
263 }
264
265 /**
266 * Appends the contents of a <code>Keywords</code> object.
267 *
268 * @param root
269 * @param keywords
270 */
271 public static void appendKeywords( Element root, Keywords keywords ) {
272 Element elem = XMLTools.appendElement( root, OWS, POWS + "Keywords" );
273
274 String[] words = keywords.getKeywords();
275 for ( String word : words )
276 XMLTools.appendElement( elem, OWS, POWS + "Keyword", word );
277
278 TypeCode code = keywords.getTypeCode();
279 if ( code != null )
280 appendCode( elem, "Type", code );
281 }
282
283 }