1 /*
2 * Copyright 2007 The International Moth Class Association (IMCA)
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
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 net.sf.imca.services;
17
18 import java.io.IOException;
19 import java.io.InputStream;
20 import java.net.URL;
21
22 import javax.xml.parsers.DocumentBuilder;
23 import javax.xml.parsers.DocumentBuilderFactory;
24 import javax.xml.parsers.ParserConfigurationException;
25
26 import org.apache.commons.logging.Log;
27 import org.apache.commons.logging.LogFactory;
28
29 import net.sf.imca.model.AssociationBO;
30 import net.sf.imca.model.PersonBO;
31 import net.sf.imca.model.BoatBO;
32 import net.sf.imca.model.entities.AssociationEntity;
33
34 import org.w3c.dom.Document;
35 import org.w3c.dom.NodeList;
36 import org.xml.sax.SAXException;
37
38 /**
39 * Service for importing data into the IMCA. This is mainly used by
40 * test cases and to migrate data form the XML based site. It is not
41 * to be used by the Web Application.
42 *
43 * @author dougculnane
44 */
45 public class ImportData extends Service {
46
47 public static String WEBSITE_PROTOCAL = "http";
48
49 public static String WEBSITE_HOST = "www.moth-sailing.org";
50
51 /**
52 * Apache Commons Logger specific to this class.
53 */
54 private Log log = LogFactory.getLog(ImportData.class);
55
56 /**
57 * This reads the xml data files for the moth web site and imports the data
58 * into the database. It is useful for providing test data and to to
59 * import the data into the new database.
60 *
61 * @return success
62 */
63 public boolean setUpMasterData() {
64
65 startTransaction();
66
67 // AssociationBO associationWorld = new AssociationBO(em,
68 // AssociationBO.IMCA_WORLD_COUNTRY_CODE);
69 // if (associationWorld.getEntity() == null){
70 // associationWorld.setEntity(new AssociationEntity());
71 // }
72 // associationWorld.getEntity().setIsOfficiallyImca(true);
73 // em.persist(associationWorld.getEntity());
74
75
76 // NodeList countyList = getNodeListForDataFile("index", "country");
77 // for (int i = 0; i < countyList.getLength(); i++) {
78 // new AssociationBO(em, countyList.item(i).getChildNodes());
79 // }
80
81
82 // NodeList riderList = getNodeListForDataFile("riders", "rider");
83 // for (int i = 0; i < riderList.getLength(); i++) {
84 // new PersonBO(em, riderList.item(i).getChildNodes());
85 // }
86 // em.flush();
87
88
89 // Re-import Boats and Evetns.
90 // NodeList boatList = getNodeListForDataFile("boats", "boat");
91 // for (int i = 0; i < boatList.getLength(); i++) {
92 // new BoatBO(em, boatList.item(i).getChildNodes());
93 // }
94 // em.flush();
95
96 try {
97 this.endTransaction();
98 } catch (Exception ex) {
99 log.error(ex);
100 return false;
101 }
102 return true;
103 }
104
105 /**
106 * Small utility for extraction of node tree value from supplied data file
107 * name.
108 */
109 private NodeList getNodeListForDataFile(String fileName, String dataType){
110
111 NodeList list = null;
112 try {
113 URL url = new URL(
114 WEBSITE_PROTOCAL, WEBSITE_HOST, "/" + fileName + ".xml");
115 InputStream is = url.openStream();
116 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
117 DocumentBuilder builder = dbf.newDocumentBuilder();
118 Document document = builder.parse(is);
119 list = document.getElementsByTagName(dataType);
120 } catch (SAXException e) {
121 log.error("Error reading " + dataType + " data", e);
122 } catch (IOException e) {
123 log.error("Error reading " + dataType + " data", e);
124 } catch (ParserConfigurationException e) {
125 log.error("Error reading " + dataType + " data", e);
126 }
127 return list;
128 }
129 }