/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.eas.client.model.store;
import com.eas.client.metadata.Parameters;
import com.eas.client.model.query.QueryEntity;
import com.eas.client.model.query.QueryModel;
import com.eas.client.model.query.QueryParametersEntity;
import com.eas.client.model.visitors.QueryModelVisitor;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
/**
*
* @author mg
*/
public class QueryModel2XmlDom extends Model2XmlDom<QueryEntity, QueryModel> implements QueryModelVisitor {
public static Document transform(QueryModel aModel) {
QueryModel2XmlDom transformer = new QueryModel2XmlDom();
return transformer.model2XmlDom(aModel);
}
@Override
protected void writeEntities(QueryModel aModel) throws DOMException {
Parameters parameters = aModel.getParameters();
if (parameters != null && !parameters.isEmpty()) {
Element paramsNode = doc.createElement(PARAMETERS_TAG_NAME);
currentNode.appendChild(paramsNode);
Node lCurrentNode = currentNode;
try {
currentNode = paramsNode;
for (int i = 0; i < parameters.getParametersCount(); i++) {
visit(parameters.get(i + 1));
}
} finally {
currentNode = lCurrentNode;
}
}
// Special processing of parameters entity in order to save events and design information.
if (aModel.getParametersEntity() != null) {
aModel.getParametersEntity().accept(this);
}
super.writeEntities(aModel);
}
@Override
public void visit(QueryModel aModel) {
writeModel(aModel);
if (aModel.getDatasourceName() != null && currentNode != null && currentNode instanceof Element) {
Element el = (Element) currentNode;
el.setAttribute(Model2XmlDom.DATAMODEL_DATASOURCE, String.valueOf(aModel.getDatasourceName()));
}
}
@Override
public void visit(QueryEntity entity) {
if (entity != null) {
Element node = doc.createElement(ENTITY_TAG_NAME);
currentNode.appendChild(node);
node.setAttribute(DATASOURCE_TITLE_ATTR_NAME, entity.getTitle());
node.setAttribute(ENTITY_ID_ATTR_NAME, String.valueOf(entity.getEntityId()));
if (entity.getQueryName() != null) {
node.setAttribute(QUERY_ID_ATTR_NAME, String.valueOf(entity.getQueryName()));
}
node.setAttribute(TABLE_SCHEMA_NAME_ATTR_NAME, entity.getTableSchemaName());
node.setAttribute(TABLE_NAME_ATTR_NAME, entity.getTableName());
node.setAttribute(ENTITY_TABLE_ALIAS, entity.getAlias());
writeEntityDesignAttributes(node, entity);
}
}
@Override
public void visit(QueryParametersEntity entity) {
Element node = doc.createElement(PARAMETERS_ENTITY_TAG_NAME);
currentNode.appendChild(node);
writeEntityDesignAttributes(node, entity);
}
}