Please i need support to added splash screen code to my package
/*
* T24_Transformer_FormView.java
*/
package t24_transformer_form;
import org.jdesktop.application.Action;
import org.jdesktop.application.ResourceMap;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import org.jdesktop.application.TaskMonitor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.filechooser.FileFilter;
// old T24 Transformer imports
import java.io.File;
import java.io.FileWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
//import java.util.Properties;
import java.util.StringTokenizer;
import javax.swing.;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.ejada.alinma.edh.xsdtransform.util.ConfigKeys;
import com.ejada.alinma.edh.xsdtransform.util.XSDElement;
import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
/*
* The application's main frame.
*/
public class T24_Transformer_FormView extends FrameView {
/**}
* static holders for application-level utilities
* { */
//private static Properties appProps;
private static Logger appLogger;
/**
*
*/
private StringBuffer columnsCSV = null;
private ArrayList<String> singleValueTableColumns = null;
private HashMap<String, String> multiValueTablesSQL = null;
private HashMap<Object, HashMap<String, Object>> groupAttrs = null;
private ArrayList<XSDElement> xsdElementsList = null;
/**
* initialization */
private void init() /*throws Exception*/ {
// init the properties object
//FileReader in = new FileReader(appConfigPropsPath);
//appProps.load(in);
// log4j.properties constant
String PROP_LOG4J_CONFIG_FILE = "log4j.properties";
// init the logger
if ((PROP_LOG4J_CONFIG_FILE != null)
&& (!PROP_LOG4J_CONFIG_FILE.equals(""))) {
PropertyConfigurator.configure(PROP_LOG4J_CONFIG_FILE);
if (appLogger == null) {
appLogger = Logger.getLogger(T24_Transformer_FormView.class.getName());
}
appLogger.info("Application initialization successful.");
}
columnsCSV = new StringBuffer(ConfigKeys.FIELD_TAG + "," + ConfigKeys.FIELD_NUMBER + ","
+ ConfigKeys.FIELD_DATA_TYPE + "," + ConfigKeys.FIELD_FMT + "," + ConfigKeys.FIELD_LEN + ","
+ ConfigKeys.FIELD_INPUT_LEN + "," + ConfigKeys.FIELD_GROUP_NUMBER + "," + ConfigKeys.FIELD_MV_GROUP_NUMBER
+ "," + ConfigKeys.FIELD_SHORT_NAME + "," + ConfigKeys.FIELD_NAME + "," + ConfigKeys.FIELD_COLUMN_NAME + ","
+ ConfigKeys.FIELD_GROUP_NAME + "," + ConfigKeys.FIELD_MV_GROUP_NAME + "," + ConfigKeys.FIELD_JUSTIFICATION
+ "," + ConfigKeys.FIELD_TYPE + "," + ConfigKeys.FIELD_SINGLE_OR_MULTI + System.getProperty("line.separator"));
singleValueTableColumns = new ArrayList<String>();
singleValueTableColumns.add(ConfigKeys.COLUMN_XPK_ROW + ConfigKeys.DELIMITER_COLUMN_TYPE
+ ConfigKeys.DATA_TYPE_XSD_NUMERIC);
multiValueTablesSQL = new HashMap<String, String>();
groupAttrs = new HashMap<Object, HashMap<String, Object>>();
xsdElementsList = new ArrayList<XSDElement>();
}
/**
* initialize the <code>DocumentBuilder</code> and read the XSD file
*
* @param docPath
* @return the <code>Document</code> object representing the read XSD file
*/
private Document retrieveDoc(String docPath) {
Document xsdDoc = null;
File file = new File(docPath);
try {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
xsdDoc = builder.parse(file);
} catch (Exception e) {
appLogger.error(e.getMessage());
}
return xsdDoc;
}
/**
* perform the iteration/modification on the document
* iterate to the level which contains all the elements (Single-Value, and Groups) and start processing each
*
* @param xsdDoc
* @return
*/
private Document processDoc(Document xsdDoc) {
ArrayList<Object> newElementsList = new ArrayList<Object>();
HashMap<String, Object> docAttrMap = new HashMap<String, Object>();
Element sequenceElement = null;
Element schemaElement = null;
// get document's root element
NodeList nodes = xsdDoc.getChildNodes();
for (int i = 0; i < nodes.getLength(); i++) {
if (ConfigKeys.TAG_SCHEMA.equals(nodes.item(i).getNodeName())) {
schemaElement = (Element) nodes.item(i);
break;
}
}
// process the document (change single-value elements, collect list of new elements to be added)
for (int i1 = 0; i1 < schemaElement.getChildNodes().getLength(); i1++) {
Node childLevel1 = (Node) schemaElement.getChildNodes().item(i1);
// <ComplexType> element
if (childLevel1.getNodeName().equals(ConfigKeys.TAG_COMPLEX_TYPE)) {
// first, get the main attributes and put it in the csv file
for (int i6 = 0; i6 < childLevel1.getChildNodes().getLength(); i6++) {
Node child6 = childLevel1.getChildNodes().item(i6);
if (ConfigKeys.TAG_ATTRIBUTE.equals(child6.getNodeName())) {
if (child6.getAttributes().getNamedItem(ConfigKeys.ATTR_NAME) != null) {
String attrName = child6.getAttributes().getNamedItem(ConfigKeys.ATTR_NAME).getNodeValue();
if (((Element) child6).getElementsByTagName(ConfigKeys.TAG_SIMPLE_TYPE).getLength() != 0) {
Node simpleTypeElement = ((Element) child6).getElementsByTagName(ConfigKeys.TAG_SIMPLE_TYPE)
.item(0);
if (((Element) simpleTypeElement).getElementsByTagName(ConfigKeys.TAG_RESTRICTION).getLength() != 0) {
Node restrictionElement = ((Element) simpleTypeElement).getElementsByTagName(
ConfigKeys.TAG_RESTRICTION).item(0);
if (((Element) restrictionElement).getElementsByTagName(ConfigKeys.TAG_MAX_LENGTH).getLength() != 0) {
Node maxLengthElement = ((Element) restrictionElement).getElementsByTagName(
ConfigKeys.TAG_MAX_LENGTH).item(0);
HashMap<String, String> elementProperties = new HashMap<String, String>();
elementProperties.put(ConfigKeys.FIELD_TAG, attrName);
elementProperties.put(ConfigKeys.FIELD_NUMBER, "0");
elementProperties.put(ConfigKeys.FIELD_DATA_TYPE, ConfigKeys.DATA_TYPE_XSD_STRING);
elementProperties.put(ConfigKeys.FIELD_FMT, "");
elementProperties.put(ConfigKeys.FIELD_NAME, attrName);
elementProperties.put(ConfigKeys.FIELD_SHORT_NAME, attrName);
elementProperties.put(ConfigKeys.FIELD_COLUMN_NAME, attrName);
elementProperties.put(ConfigKeys.FIELD_SINGLE_OR_MULTI, "S");
elementProperties.put(ConfigKeys.FIELD_LEN, maxLengthElement.getAttributes().getNamedItem(
ConfigKeys.ATTR_VALUE).getNodeValue());
elementProperties.put(ConfigKeys.FIELD_INPUT_LEN, maxLengthElement.getAttributes()
.getNamedItem(ConfigKeys.ATTR_VALUE).getNodeValue());
constructElementRow(elementProperties);
// add the attribute as a column in the single-value table
singleValueTableColumns.add(attrName + ConfigKeys.DELIMITER_COLUMN_TYPE
+ ConfigKeys.DATA_TYPE_XSD_STRING + ConfigKeys.DELIMITER_COLUMN_TYPE
+ maxLengthElement.getAttributes().getNamedItem(ConfigKeys.ATTR_VALUE).getNodeValue());
// add the attribute as an element in the elements list
addToElementsList(attrName, attrName);
appLogger.debug("added attribute: " + attrName);
}
}
}
}
}
}
// now, loop on the elements and process them
for (int i2 = 0; i2 < childLevel1.getChildNodes().getLength(); i2++) {
Node childLevel2 = (Node) childLevel1.getChildNodes().item(i2);
// <Sequence> element
if (childLevel2.getNodeName().equals(ConfigKeys.TAG_SEQUENCE)) {
sequenceElement = (Element) childLevel2;
for (int i3 = 0; i3 < childLevel2.getChildNodes().getLength(); i3++) {
Node childLevel3 = (Node) childLevel2.getChildNodes().item(i3);
// <Element> element
if (childLevel3.getNodeName().equals(ConfigKeys.TAG_ELEMENT)) {
// check if single element or group
if (isGroup(childLevel3)) {
processGroup(childLevel3, true, null, null, docAttrMap, xsdDoc, newElementsList);
// insert a new comment node with the contents of the group tag
sequenceElement.insertBefore(xsdDoc.createComment(serialize(childLevel3)), childLevel3);
// remove the group tag
sequenceElement.removeChild(childLevel3);
} else {
processElement(childLevel3);
}
}
}
}
}
}
}
// add new elements
// this step should be after finishing processing the whole document. when you add new elements to the document
// while you are working on it, those new elements will be included in the processing. We don't need that!
for (int i = 0; i < newElementsList.size(); i++) {
sequenceElement.appendChild((Element) newElementsList.get(i));
}
// write the new required attributes to the schema element
Iterator<String> attrIter = docAttrMap.keySet().iterator();
while(attrIter.hasNext()) {
Element attr = (Element) docAttrMap.get(attrIter.next());
Element newAttrElement = xsdDoc.createElement(ConfigKeys.TAG_ATTRIBUTE);
appLogger.debug("appending attr. [" + attr.getAttribute(ConfigKeys.ATTR_NAME) + "]...");
newAttrElement.setAttribute(ConfigKeys.ATTR_NAME, attr.getAttribute(ConfigKeys.ATTR_NAME));
newAttrElement.setAttribute(ConfigKeys.ATTR_TYPE, attr.getAttribute(ConfigKeys.ATTR_TYPE));
schemaElement.appendChild(newAttrElement);
}
return xsdDoc;
}
/**
* add a new <code>XSDElement</code> with the given <code>name</code> and <code>businessName</code> to
* the elements list
*
* @param name
* @param businessName
*/
private void addToElementsList(String name, String businessName) {
xsdElementsList.add(new XSDElement(name, businessName));
}
/**
* add the given <code>XSDElement</code> to the elements list
*
* @param element
*/
private void addToElementsList(XSDElement element) {
xsdElementsList.add(element);
}
/**
* check if the <code>element</code> sent is single-value element or group
* element. the comparison depends on the children of the element. if found one of type
* <code>ComplexType</code> then it's a group element, and if of type
* <code>SimpleType</code> then it's a single-value element
*
* @param element
* @return <code>true</code> if the element is a group element,
* <code>false</code> otherwise
*/
private boolean isGroup(Node element) {
for (int i = 0; i < element.getChildNodes().getLength(); i++) {
Node child = (Node) element.getChildNodes().item(i);
if (child.getNodeName().equals(ConfigKeys.TAG_COMPLEX_TYPE)) { // found a ComplexType child (Group element)
return true;
} else if (child.getNodeName().equals(ConfigKeys.TAG_SIMPLE_TYPE)) { // found a SimpleType child (Single-Value element)
return false;
}
}
return false;
/*
String attrName = null;
if (element.getAttributes() != null) {
Node attribute = element.getAttributes().getNamedItem(XSDTransformer.ATTR_NAME);
if (attribute != null) {
attrName = attribute.getNodeValue();
}
}
if (attrName.startsWith("g")) { // group element
return true;
} else { // single element
return false;
}
*/
}
/**
* process a group element. recursively, process groups till no more group elements are found
*
* @param element
* @param isFirstLevelGroup
* @param attrMap
* @param docAttrMap
* @param xsdDoc
* @param newElementsList
*/
private void processGroup(Node element, boolean isFirstLevelGroup, Node parentGroup, XSDElement parentGroupElement, HashMap<String, Object> docAttrMap,
Document xsdDoc, ArrayList<Object> newElementsList) {
String elementName = null;
HashMap<String, Object> groupAttrMap = new HashMap<String, Object>();
HashMap<String, Object> parentGroupAttrMap = new HashMap<String, Object>();
XSDElement groupElement = null;
if (element.getAttributes().getNamedItem(ConfigKeys.ATTR_NAME) != null) {
elementName = element.getAttributes().getNamedItem(ConfigKeys.ATTR_NAME).getNodeValue();
}
appLogger.debug("processing group [" + elementName + "]...");
groupElement = new XSDElement(elementName, elementName);
// get the attributes if a non-first-level-group
// attributes are: groups's own attributes + parent group's attributes
if (!isFirstLevelGroup) {
// get the current element (group) attributes
for (int i1 = 0; i1 < element.getChildNodes().getLength(); i1++) {
if (ConfigKeys.TAG_COMPLEX_TYPE.equals(element.getChildNodes().item(i1).getNodeName())) {
Node complexTypeNode = element.getChildNodes().item(i1);
for (int i2 = 0; i2 < complexTypeNode.getChildNodes().getLength(); i2++) {
if (ConfigKeys.TAG_ATTRIBUTE.equals(complexTypeNode.getChildNodes().item(i2).getNodeName())) {
appLogger.debug("add group attr: "
+ ((Element) complexTypeNode.getChildNodes().item(i2)).getAttribute(ConfigKeys.ATTR_NAME));
groupAttrMap.put(((Element) complexTypeNode.getChildNodes().item(i2)).getAttribute(ConfigKeys.ATTR_NAME),
complexTypeNode.getChildNodes().item(i2));
docAttrMap.put(((Element) complexTypeNode.getChildNodes().item(i2)).getAttribute(ConfigKeys.ATTR_NAME),
complexTypeNode.getChildNodes().item(i2));
}
}
}
}
// now, get the parent's attributes
parentGroupAttrMap = groupAttrs.get(parentGroup);
if (parentGroupAttrMap != null) {
Iterator<String> iter = parentGroupAttrMap.keySet().iterator();
while (iter.hasNext()) {
String attrName = iter.next();
groupAttrMap.put(attrName, parentGroupAttrMap.get(attrName));
}
}
// add the attributes to the group element that will be added to the elements list
Iterator<String> itr = groupAttrMap.keySet().iterator();
while(itr.hasNext()) {
groupElement.addAttribute(itr.next());
}
// put the attributes in the attributes map
groupAttrs.put(element, groupAttrMap);
}
for (int i = 0; i < element.getChildNodes().getLength(); i++) {
Node childLevel1 = (Node) element.getChildNodes().item(i);
if (childLevel1.getNodeName().equals(ConfigKeys.TAG_COMPLEX_TYPE)) {
for (int j = 0; j < childLevel1.getChildNodes().getLength(); j++) {
Node childLevel2 = (Node) childLevel1.getChildNodes().item(j);
if (childLevel2.getNodeName().equals(ConfigKeys.TAG_SEQUENCE)) {
for (int k = 0; k < childLevel2.getChildNodes().getLength(); k++) {
Node childLevel3 = (Node) childLevel2.getChildNodes().item(k);
if (childLevel3.getNodeName().equals(ConfigKeys.TAG_ELEMENT)) {
// check if single element or group
if (isGroup(childLevel3)) { // another group element..
// unfortunately, a recursion is
// needed here!!! :-(
processGroup(childLevel3, false, element, groupElement, docAttrMap, xsdDoc, newElementsList);
} else { // reached a single-value element.. copy it under the
// main sequence and apply the name<>shorname replacement
processGroupElement(childLevel3, element, groupElement, isFirstLevelGroup, xsdDoc, newElementsList);
}
}
}
}
}
}
}
if (isFirstLevelGroup) {
addToElementsList(groupElement);
} else {
parentGroupElement.addChild(groupElement);
}
appLogger.debug("finished processing group [" + elementName + "].");
}
/**
* process the sent <code>element</code> to extract/modify required
* information:
* 1. replace the <code>name</code> attribute with the <code>shortname</code>.
*
* @param element
*/
private void processElement(Node element) {
String fieldShortName = null;
String fieldColumnName = null;
String fieldDataType = null;
String fieldFormat = null;
String fieldInputLength = null;
String elementName = null;
HashMap<String, String> elementProperties = new HashMap<String, String>();
if (element.getAttributes().getNamedItem(ConfigKeys.ATTR_NAME) != null) {
elementName = element.getAttributes().getNamedItem(ConfigKeys.ATTR_NAME).getNodeValue();
}
appLogger.debug("processing element [" + elementName + "]...");
for (int i = 0; i < element.getChildNodes().getLength(); i++) {
Node childLevel1 = (Node) element.getChildNodes().item(i);
if (childLevel1.getNodeName().equals(ConfigKeys.TAG_ANNOTATION)) {
for (int j = 0; j < childLevel1.getChildNodes().getLength(); j++) {
Node childLevel2 = (Node) childLevel1.getChildNodes().item(j);
if (childLevel2.getNodeName().equals(ConfigKeys.TAG_APP_INFO)) {
for (int k = 0; k < childLevel2.getChildNodes().getLength(); k++) {
Node childLevel3 = (Node) childLevel2.getChildNodes().item(k);
if (childLevel3.getNodeName().equals(ConfigKeys.TAG_HAS_PROPERTY)) {
if (childLevel3.getAttributes() != null) {
String attrName = null;
Node attribute = childLevel3.getAttributes().getNamedItem(ConfigKeys.ATTR_NAME);
if (attribute != null) {
attrName = attribute.getNodeValue();
elementProperties.put(attrName, childLevel3.getAttributes().getNamedItem(ConfigKeys.ATTR_VALUE)
.getNodeValue());
if (attrName.equals(ConfigKeys.FIELD_SHORT_NAME)) {
fieldShortName = childLevel3.getAttributes().getNamedItem(ConfigKeys.ATTR_VALUE)
.getNodeValue();
} else if (attrName.equals(ConfigKeys.FIELD_COLUMN_NAME)) {
fieldColumnName = childLevel3.getAttributes().getNamedItem(ConfigKeys.ATTR_VALUE)
.getNodeValue();
} else if (attrName.equals(ConfigKeys.FIELD_DATA_TYPE)) {
fieldDataType = childLevel3.getAttributes().getNamedItem(ConfigKeys.ATTR_VALUE)
.getNodeValue();
} else if (attrName.equals(ConfigKeys.FIELD_FMT)) {
fieldFormat = childLevel3.getAttributes().getNamedItem(ConfigKeys.ATTR_VALUE)
.getNodeValue();
} else if (attrName.equals(ConfigKeys.FIELD_INPUT_LEN)) {
fieldInputLength = childLevel3.getAttributes().getNamedItem(ConfigKeys.ATTR_VALUE)
.getNodeValue();
}
}
}
}
}
}
}
}
}
// replace the name attribute with the shortname
if (element.getAttributes().getNamedItem(ConfigKeys.ATTR_NAME) != null) {
element.getAttributes().getNamedItem(ConfigKeys.ATTR_NAME).setNodeValue(fieldShortName);
}
elementProperties.put(ConfigKeys.FIELD_SINGLE_OR_MULTI, "S");
constructElementRow(elementProperties);
singleValueTableColumns.add(fieldShortName + ConfigKeys.DELIMITER_COLUMN_TYPE + fieldDataType + fieldFormat
+ ConfigKeys.DELIMITER_COLUMN_TYPE + fieldInputLength);
// add the element to elements list
addToElementsList(fieldShortName, fieldColumnName);
appLogger.debug("finished processing element [" + elementName + "].");
}
/**
* process the sent <code>element</code> to extract/modify required
* information:
* 1. copy the element under the main sequence
* 2. replace the <code>name</code> attribute with the <code>shortname</code>.
* 3. add the attributes of the parent groups (if non-first-level-group)
*
* @param element
*/
private void processGroupElement(Node element, Node parentGroup, XSDElement parentGroupElement, boolean isFirstLevelGroup, Document xsdDoc, ArrayList<Object> newElementsList) {
String fieldShortName = null;
String fieldColumnName = null;
String fieldDataType = null;
String fieldFormat = null;
String fieldInputLength = null;
String elementName = null;
Element newElement = null;
HashMap<String, String> elementProperties = new HashMap<String, String>();
ArrayList<String> tableColumns = new ArrayList<String>();
HashMap<String, Object> groupAttrMap = null;
if (element.getAttributes().getNamedItem(ConfigKeys.ATTR_NAME) != null) {
elementName = element.getAttributes().getNamedItem(ConfigKeys.ATTR_NAME).getNodeValue();
}
appLogger.debug("processing element [" + elementName + "]...");
// 1. copy the element
newElement = (Element) element.cloneNode(true);
newElement.setAttribute(ConfigKeys.ATTR_MAX_OCCURS, "unbounded");
// 2. if non-first-level-group, replace the element's SimpleType tag with a ComplexType tag
if (!isFirstLevelGroup) {
if (((Element) newElement).getElementsByTagName(ConfigKeys.TAG_SIMPLE_TYPE).getLength() != 0) {
// there should be only one tag of SimpleType
Node simpleTypeNode = ((Element) newElement).getElementsByTagName(ConfigKeys.TAG_SIMPLE_TYPE).item(0);
// create the new ComplexType element
Element complexTypeNode = xsdDoc.createElement(ConfigKeys.TAG_COMPLEX_TYPE);
complexTypeNode.setAttribute(ConfigKeys.ATTR_MIXED, "true");
// get the list of attributes for the parent group
groupAttrMap = groupAttrs.get(parentGroup);
Iterator<String> attrIter = groupAttrMap.keySet().iterator();
while(attrIter.hasNext()) {
Element attr = (Element) groupAttrMap.get(attrIter.next());
Element newAttrElement = xsdDoc.createElement(ConfigKeys.TAG_ATTRIBUTE);
appLogger.debug("adding attr. [" + attr.getAttribute(ConfigKeys.ATTR_NAME) + "]...");
newAttrElement.setAttribute(ConfigKeys.ATTR_REF, attr.getAttribute(ConfigKeys.ATTR_NAME));
newAttrElement.setAttribute(ConfigKeys.ATTR_USE, "optional");
complexTypeNode.appendChild(newAttrElement);
}
// replace the old SimpleType node with the new ComplexType node
newElement.replaceChild(complexTypeNode, simpleTypeNode);
}
}
// 3. replace the name with the shortname in the new element
for (int i = 0; i < newElement.getChildNodes().getLength(); i++) {
Node childLevel1 = (Node) newElement.getChildNodes().item(i);
if (childLevel1.getNodeName().equals(ConfigKeys.TAG_ANNOTATION)) {
for (int j = 0; j < childLevel1.getChildNodes().getLength(); j++) {
Node childLevel2 = (Node) childLevel1.getChildNodes().item(j);
if (childLevel2.getNodeName().equals(ConfigKeys.TAG_APP_INFO)) {
for (int k = 0; k < childLevel2.getChildNodes().getLength(); k++) {
Node childLevel3 = (Node) childLevel2.getChildNodes().item(k);
if (childLevel3.getNodeName().equals(ConfigKeys.TAG_HAS_PROPERTY)) {
if (childLevel3.getAttributes() != null) {
String attrName = null;
Node attribute = childLevel3.getAttributes().getNamedItem(ConfigKeys.ATTR_NAME);
if (attribute != null) {
attrName = attribute.getNodeValue();
elementProperties.put(attrName, childLevel3.getAttributes().getNamedItem(ConfigKeys.ATTR_VALUE)
.getNodeValue());
if (attrName.equals(ConfigKeys.FIELD_SHORT_NAME)) {
fieldShortName = childLevel3.getAttributes().getNamedItem(ConfigKeys.ATTR_VALUE)
.getNodeValue();
} else if (attrName.equals(ConfigKeys.FIELD_COLUMN_NAME)) {
fieldColumnName = childLevel3.getAttributes().getNamedItem(ConfigKeys.ATTR_VALUE)
.getNodeValue();
} else if (attrName.equals(ConfigKeys.FIELD_DATA_TYPE)) {
fieldDataType = childLevel3.getAttributes().getNamedItem(ConfigKeys.ATTR_VALUE)
.getNodeValue();
} else if (attrName.equals(ConfigKeys.FIELD_FMT)) {
fieldFormat = childLevel3.getAttributes().getNamedItem(ConfigKeys.ATTR_VALUE)
.getNodeValue();
} else if (attrName.equals(ConfigKeys.FIELD_INPUT_LEN)) {
fieldInputLength = childLevel3.getAttributes().getNamedItem(ConfigKeys.ATTR_VALUE)
.getNodeValue();
}
}
}
}
}
}
}
}
}
if (newElement.getAttributes().getNamedItem(ConfigKeys.ATTR_NAME) != null) {
newElement.getAttributes().getNamedItem(ConfigKeys.ATTR_NAME).setNodeValue(fieldShortName);
}
// 4. save the new element to be added to the sequence list
newElementsList.add(newElement);
elementProperties.put(ConfigKeys.FIELD_SINGLE_OR_MULTI, "M");
constructElementRow(elementProperties);
// create the MULTI-VALUE table
// 0. Primary Key
tableColumns.add(ConfigKeys.COLUMN_XPK_ROW + ConfigKeys.DELIMITER_COLUMN_TYPE + ConfigKeys.DATA_TYPE_XSD_STRING
+ ConfigKeys.DELIMITER_COLUMN_TYPE + ConfigKeys.COLUMN_XPK_ROW_LENGTH);
// 1. foreign key
tableColumns.add(ConfigKeys.COLUMN_FK_ROW + ConfigKeys.DELIMITER_COLUMN_TYPE + ConfigKeys.DATA_TYPE_XSD_NUMERIC);
// 2. field value
tableColumns.add(fieldShortName + ConfigKeys.DELIMITER_COLUMN_TYPE + fieldDataType + fieldFormat
+ ConfigKeys.DELIMITER_COLUMN_TYPE + fieldInputLength);
// 3. attributes
if (groupAttrMap != null) {
Iterator<String> attrIter = groupAttrMap.keySet().iterator();
while (attrIter.hasNext()) {
Element attr = (Element) groupAttrMap.get(attrIter.next());
tableColumns.add(attr.getAttribute(ConfigKeys.ATTR_NAME) + ConfigKeys.DELIMITER_COLUMN_TYPE
+ ConfigKeys.DATA_TYPE_XSD_NUMERIC);
}
}
multiValueTablesSQL.put(sub_table_prefix.getText() + fieldShortName, constructMultiValueTableSQL(
sub_table_prefix.getText() + fieldShortName, tableColumns));
// add the element to it's parent group children
parentGroupElement.addChild(new XSDElement(fieldShortName, fieldColumnName));
appLogger.debug("finished processing element [" + elementName + "].");
}
/**
* write resulted files
*
* @param xsdDoc
* @param docPath
*/
private void writeResults(Document xsdDoc, String resultsDir, String newXSDFileName, String csvFileName) {
String rsDir = resultsDir + File.separator + new SimpleDateFormat("yyyyMMdd-HHmm").format(new Date());
try {
File resultsDirFile = new File(rsDir);
if (!resultsDirFile.exists()) {
resultsDirFile.mkdirs();
}
// write the XSD doc
appLogger.info("writing the transformed XSD...");
Source source = new DOMSource(xsdDoc);
Result result = new StreamResult(rsDir + File.separator + newXSDFileName);
Transformer xformer = TransformerFactory.newInstance().newTransformer();
// xformer.setOutputProperty("indent", "yes");
xformer.transform(source, result);
appLogger.info("finished writing the transformed XSD.");
// write the CSV columns file
appLogger.info("writing the CSV file...");
FileWriter csvWriter = new FileWriter(rsDir + File.separator + csvFileName);
csvWriter.write(columnsCSV.toString());
csvWriter.close();
appLogger.info("finished writing the CSV file.");
// write the master single-value table
appLogger.info("writing the creation script for master table (single-values)...");
FileWriter masterTableWriter = new FileWriter(rsDir + File.separator
+ main_edh_table_name.getText() + ".sql");
masterTableWriter.write(constructSingleValueTableSQL(main_edh_table_name.getText(),
singleValueTableColumns));
masterTableWriter.close();
appLogger.info("finished writing the creation script for master table (single-values).");
// write the multi-value tables sql
appLogger.info("writing the creation script for slave tables (multi-values)...");
Iterator<String> iter = multiValueTablesSQL.keySet().iterator();
while (iter.hasNext()) {
String tableName = iter.next();
String sql = multiValueTablesSQL.get(tableName);
FileWriter tableSQLWriter = new FileWriter(rsDir + File.separator + tableName + ".sql");
tableSQLWriter.write(sql);
tableSQLWriter.close();
}
appLogger.info("finished writing the creation script for slave tables (multi-values).");
// write the single-value view
appLogger.info("writing the creation script for single-value selection view...");
FileWriter singleValueViewWriter = new FileWriter(rsDir + File.separator
+ view_name_single.getText() + ".sql");
singleValueViewWriter.write(constructViewSQL(ConfigKeys.SQL_VIEW_SINGLE));
singleValueViewWriter.close();
appLogger.info("finished writing the creation script for single-value selection view.");
// debug
for (int i = 0; i < xsdElementsList.size(); i++) {
getMultiView(xsdElementsList.get(i));
/*// if (xsdElementsList.get(i).getAllDescendants() != null) {
// for (int j = 0; j < xsdElementsList.get(i).getAllDescendants().size(); j++) {
// appLogger.debug(main_edh_table_name.getText() + "." + ConfigKeys.COLUMN_XPK_ROW
// + "=" + xsdElementsList.get(i).getAllDescendants().get(j).getName() + "." + ConfigKeys.COLUMN_FK_ROW);
// }
// }
*/ }
} catch (Exception e) {
appLogger.error(e.getMessage());
}
}
private String getMultiView(XSDElement element)