View Javadoc
1 /* ==================================================================== 2 * License: 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in 13 * the documentation and/or other materials provided with the 14 * distribution. 15 * 16 * 3. The end-user documentation included with the redistribution, 17 * if any, must include the following acknowledgment: 18 * "This product includes software developed by 19 * Robert Half International (http://www.rhi.com/)." 20 * Alternately, this acknowledgment may appear in the software itself, 21 * if and wherever such third-party acknowledgments normally appear. 22 * 23 * 4. The names "Parc", "RHI", and "Robert Half International" must 24 * not be used to endorse or promote products derived from this 25 * software without prior written permission. For written 26 * permission, please contact pete.mckinstry@rhi.com. 27 * 28 * 5. Products derived from this software may not be called "PARC", 29 * nor may "PARC" appear in their name, without prior written 30 * permission of Robert Half International. 31 * 32 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 33 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 34 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 35 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 36 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 37 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 38 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 39 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 40 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 41 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 42 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 43 * SUCH DAMAGE. 44 * ==================================================================== 45 * 46 */ 47 package com.rhi.architecture.parc.adapter.xml; 48 49 import com.rhi.architecture.config.ConfigurationException; 50 import com.rhi.architecture.logging.LogUtil; 51 import com.rhi.architecture.logging.Logger; 52 import com.rhi.architecture.parc.ProcessingException; 53 import com.rhi.architecture.parc.adapter.AbstractInputAdapter; 54 import com.rhi.architecture.resource.InitializationException; 55 56 import java.io.File; 57 import java.io.FileNotFoundException; 58 import java.io.FileReader; 59 import java.io.FilenameFilter; 60 import java.io.IOException; 61 import java.util.ArrayList; 62 import java.util.Collection; 63 import java.util.Properties; 64 65 import org.exolab.castor.mapping.Mapping; 66 import org.exolab.castor.mapping.MappingException; 67 import org.exolab.castor.xml.MarshalException; 68 import org.exolab.castor.xml.Unmarshaller; 69 import org.exolab.castor.xml.ValidationException; 70 71 /*** 72 * Castor XML based InputAdapter. 73 * I still need to test performance, but the ease of use is 74 * phenominal. 75 * 76 * @author Pete McKinstry 77 * @copyright 2002, Robert Half Int'l., Inc. All rights reserved. 78 * 79 * @since 1.0 80 */ 81 public class XMLInputAdapter extends AbstractInputAdapter { 82 83 private static Logger log = null; 84 85 // Castor objects 86 private static Mapping mapping; 87 private static Unmarshaller unmarshaller; 88 89 // the OQL to pull the data for processing. 90 private static File inputDirectory; 91 92 /*** 93 * Perform any resource initialization. 94 * 95 * @param props 96 * @throws InitializationException 97 * @since 1.0 98 */ 99 public void init(Properties props) throws InitializationException { 100 super.init(props); 101 102 try { 103 log = LogUtil.getLogger(); 104 } 105 catch (ConfigurationException e) { 106 throw new InitializationException(e.toString()); 107 } 108 log.debug("starting init"); 109 try { 110 mapping = new Mapping(); 111 mapping.loadMapping(props.getProperty("jdo_mapping_file")); 112 unmarshaller = new Unmarshaller(mapping); 113 String dirName = props.getProperty("jdo_input_directory"); 114 inputDirectory = new File(dirName); 115 if (inputDirectory.isDirectory() == false) { 116 throw new InitializationException("input directory invalid- not a directory."); 117 } 118 } 119 catch (IOException ioe) { 120 throw new InitializationException(ioe.toString()); 121 } 122 catch (MappingException me) { 123 throw new InitializationException(me.toString()); 124 } 125 super.init(props); 126 } 127 128 /*** 129 * Perform any resource finalization. 130 * 131 * @since 1.0 132 */ 133 public void cleanup() { 134 super.cleanup(); 135 } 136 137 /*** 138 * Retrieve the batch. 139 * 140 * @return Collection - the records bound for the channel. 141 * 142 * @throws ProcessingException 143 * @since 1.0 144 */ 145 protected Collection loadBatch() throws ProcessingException { 146 ArrayList list = new ArrayList(); 147 148 try { 149 File[] xmlFiles = inputDirectory.listFiles(new FilenameFilter() { 150 /*** 151 * filter out all but the .xml files. 152 * @param dir 153 * @param name 154 * @return boolean 155 * @see java.io.FilenameFilter#accept(java.io.File, java.lang.String) 156 */ 157 public boolean accept(File dir, String name) { 158 return name.endsWith(".xml"); 159 } 160 }); 161 for (int i = 0; i < xmlFiles.length; ++i) { 162 Object o = unmarshaller.unmarshal(new FileReader(xmlFiles[i])); 163 list.add(o); 164 } 165 } 166 catch (FileNotFoundException fnfe) { 167 throw new ProcessingException(fnfe.toString()); 168 } 169 catch (MarshalException me) { 170 throw new ProcessingException(me.toString()); 171 } 172 catch (ValidationException me) { 173 throw new ProcessingException(me.toString()); 174 } 175 return list; 176 } 177 }

This page was automatically generated by Maven