All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.ctakes.jdl.data.loader.XmlLoader Maven / Gradle / Ivy

The newest version!
/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.ctakes.jdl.data.loader;

import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.ri.model.NodePointer;
import org.apache.ctakes.jdl.data.base.JdlConnection;
import org.apache.ctakes.jdl.data.xml.DomUtil;
import org.apache.ctakes.jdl.schema.xdl.XmlLoadType;
import org.apache.ctakes.jdl.schema.xdl.XmlLoadType.Column;
import org.w3c.dom.Document;
import org.w3c.dom.Node;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.stream.Collectors;

/**
 * Loader of XML file.
 * 
 * @author mas
 */
public class XmlLoader extends Loader {
	private JXPathContext context;
	private XmlLoadType loader;

	/**
	 * @param loader
	 *            the loader
	 * @param document
	 *            the document
	 */
	public XmlLoader(final XmlLoadType loader, final Document document) {
		context = JXPathContext.newContext(document);
		this.loader = loader;
	}

	/**
	 * @param loader
	 *            the xml to manage
	 * @return the sql string
	 */
	public final String getSqlInsert(final XmlLoadType loader) {
//		System.out.println( "XmlLoader.getSqlInsert" );
//		loader.getColumn().forEach( c -> System.out.println( c.getName() ) );
		final String columns = loader.getColumn()
											  .stream()
											  .map( Column::getName )
											  .collect( Collectors.joining( "," ) );
		final String values = loader.getColumn()
											 .stream()
											 .map( c -> "?" )
											 .collect( Collectors.joining( "," ) );
		return "insert into " + loader.getTable() + " (" + columns + ") values (" + values + ")";
	}

	/**
	 * @param jdlConnection
	 *            the jdlConnection to manage
	 */
	@Override
	public final void dataInsert(final JdlConnection jdlConnection) {
		String sql = getSqlInsert(loader);
		Number ncommit = loader.getCommit();
		int r = 0;
		try {
			Iterator iterator = context.iteratePointers(loader.getXroot());
			while (iterator.hasNext()) {
				r++;
				NodePointer pointer = (NodePointer) iterator.next();
				Node node = (Node) pointer.getNode();
				JXPathContext context = JXPathContext.newContext(DomUtil.nodeToDocument(node));
				try {
					int c = 0;
					PreparedStatement preparedStatement = jdlConnection.getOpenConnection().prepareStatement(sql);
					if (ncommit == null) {
						jdlConnection.setAutoCommit(true);
					} else {
						jdlConnection.setAutoCommit(false);
					}
					for (Column column : loader.getColumn()) {
						c++;
						Object value = column.getConstant();
						if (value == null) {
							if (column.getSeq() != null) {
								value = r + column.getSeq().intValue();
							} else if (column.getXpath() != null) {
								value = this.context.getValue(column.getXpath());
							} else {
								value = context.getPointer(column.getXleaf()).getValue();
							}
						}
						preparedStatement.setObject(c, value);
					}
					executeBatch(preparedStatement);
					if (!jdlConnection.isAutoCommit() && (r % ncommit.intValue() == 0)) {
						jdlConnection.commitConnection();
					}
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			if (!jdlConnection.isAutoCommit()) {
				jdlConnection.commitConnection();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy