/**
* 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.sqoop.manager.oracle.util;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* Holds table definition for generated Oracle table.
*/
public class OracleTableDefinition {
private String tableName;
private List<OracleDataDefinition> columnList =
new ArrayList<OracleDataDefinition>();
private List<String> primaryKeyColumns = new ArrayList<String>();
private List<String> uniqueKeyColumns = new ArrayList<String>();
private String partitionClause;
private boolean indexOrganizedTable = false;
public List<String> getUniqueKeyColumns() {
return uniqueKeyColumns;
}
public void setUniqueKeyColumns(List<String> newUniqueKeyColumns) {
this.uniqueKeyColumns = newUniqueKeyColumns;
}
public List<String> getPrimaryKeyColumns() {
return primaryKeyColumns;
}
public void setPrimaryKeyColumns(List<String> newPrimaryKeyColumns) {
this.primaryKeyColumns = newPrimaryKeyColumns;
}
public List<OracleDataDefinition> getColumnList() {
return columnList;
}
public void setColumnList(List<OracleDataDefinition> newColumnList) {
this.columnList = newColumnList;
}
public String getTableName() {
return tableName;
}
public void setTableName(String newTableName) {
this.tableName = newTableName;
}
public String getPartitionClause() {
return partitionClause == null ? "" : partitionClause;
}
public void setPartitionClause(String newPartitionClause) {
this.partitionClause = newPartitionClause;
}
public boolean isIndexOrganizedTable() {
return indexOrganizedTable;
}
public void setIndexOrganizedTable(boolean newIndexOrganizedTable) {
this.indexOrganizedTable = newIndexOrganizedTable;
}
public OracleTableDefinition() {
}
public OracleTableDefinition(URL url) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File(url.toURI()));
Element table = doc.getDocumentElement();
this.tableName =
table.getElementsByTagName("name").item(0).getChildNodes().item(0)
.getNodeValue();
NodeList columns = table.getElementsByTagName("column");
for (int i = 0; i < columns.getLength(); i++) {
Node columnNode = columns.item(i);
if (columnNode.getNodeType() == Node.ELEMENT_NODE) {
Element columnElement = (Element) columnNode;
String name =
columnElement.getElementsByTagName("name").item(0)
.getChildNodes().item(0).getNodeValue();
String dataType =
columnElement.getElementsByTagName("dataType").item(0)
.getChildNodes().item(0).getNodeValue();
String dataExpression =
columnElement.getElementsByTagName("dataExpression").item(0)
.getChildNodes().item(0).getNodeValue();
this.columnList.add(new OracleDataDefinition(name, dataType,
dataExpression));
}
}
NodeList primaryKeyColumnsNodeList =
table.getElementsByTagName("primaryKeyColumn");
for (int i = 0; i < primaryKeyColumnsNodeList.getLength(); i++) {
Node primaryKeyColumnNode = primaryKeyColumnsNodeList.item(i);
if (primaryKeyColumnNode.getNodeType() == Node.ELEMENT_NODE) {
Element primaryKeyColumnElement = (Element) primaryKeyColumnNode;
this.primaryKeyColumns.add(primaryKeyColumnElement.getChildNodes()
.item(0).getNodeValue());
}
}
NodeList uniqueKeyColumnsNodeList =
table.getElementsByTagName("uniqueKeyColumn");
for (int i = 0; i < uniqueKeyColumnsNodeList.getLength(); i++) {
Node uniqueKeyColumnNode = uniqueKeyColumnsNodeList.item(i);
if (uniqueKeyColumnNode.getNodeType() == Node.ELEMENT_NODE) {
Element uniqueKeyColumnElement = (Element) uniqueKeyColumnNode;
this.uniqueKeyColumns.add(uniqueKeyColumnElement.getChildNodes()
.item(0).getNodeValue());
}
}
Node partitionClauseNode =
table.getElementsByTagName("partitionClause").item(0);
if (partitionClauseNode != null) {
this.partitionClause =
partitionClauseNode.getChildNodes().item(0).getNodeValue();
}
Node indexOrganizedTableNode =
table.getElementsByTagName("indexOrganizedTable").item(0);
if (indexOrganizedTableNode != null) {
String indexOrganizedTableStr =
indexOrganizedTableNode.getChildNodes().item(0).getNodeValue();
this.indexOrganizedTable = Boolean.parseBoolean(indexOrganizedTableStr);
}
} catch (Exception e) {
throw new RuntimeException("Could not load table configuration", e);
}
}
}