Commit 2ed91a45f83bd48e5438716980370f778f130c24

Authored by Carlos Alberto
1 parent d1c5ffd1
Exists in master

Melhoria na importação de dataObject

cit-esi-api/src/main/java/br/com/centralit/esi/api/data/service/impl/DataObjectServiceImpl.java
... ... @@ -640,49 +640,9 @@ public class DataObjectServiceImpl extends GenericServiceImpl<DataObject, Long>
640 640 sourceObject.setGenerateController(sourceObject.getFormVersion() != null);
641 641 sourceObject.setDataSource(dataSourceService.save(sourceObject.getDataSource(), false));
642 642  
643   - Database database = sourceObject.getDataSource().getDatabase();
644 643 if (sourceObject.getFields() != null) {
645   - for (DataColumn dataColumn: sourceObject.getColumns()) {
646   - dataColumn.setId(null);
647   - if (dataColumn.getWidget() != null) {
648   - dataColumn.setWidget(formWidgetService.findByName(dataColumn.getWidget().getName()));
649   - }
650   - String name = dataColumn.getType().getName();
651   - dataColumn.setType(dataTypeService.findByName(name));
652   - if (dataColumn.getType() == null) {
653   - String databaseType = dataColumn.getDatabaseType() != null ? dataColumn.getDatabaseType() : name;
654   - for (DatabaseDomain domain : database.getTypes()) {
655   - if (domain.getName().equalsIgnoreCase(databaseType)) {
656   - dataColumn.setType(domain.getDataType());
657   - break;
658   - }
659   - }
660   - }
661   - if (dataColumn.getType() == null) {
662   - throw new EsiBusinessException("Tipo de dados '"+name+"' não encontrado");
663   - }
664   -
665   - String databaseType = null;
666   - boolean exists = false;
667   - for (DatabaseDomain domain : database.getTypes()) {
668   - if (domain.getDataType().getId().equals(dataColumn.getType().getId())) {
669   - if (databaseType == null) {
670   - databaseType = domain.getName();
671   - }
672   - if (!UtilString.isNullOrEmpty(dataColumn.getDatabaseType()) && dataColumn.getDatabaseType().equalsIgnoreCase(domain.getName())) {
673   - exists = true;
674   - break;
675   - }
676   - }
677   - }
678   - if (!exists) {
679   - dataColumn.setDatabaseType(databaseType);
680   - }
681   -
682   - if (UtilString.isNullOrEmpty(dataColumn.getDatabaseType())) {
683   - throw new EsiBusinessException("Tipo de dados '"+name+"' não encontrado no BD");
684   - }
685   - }
  644 + this.verifyColumnsForImport(sourceObject);
  645 +
686 646 for (Relationship relationship: sourceObject.getRelationships()) {
687 647 relationship.setId(null);
688 648 relationship.setReferencedColumn(null);
... ... @@ -721,5 +681,65 @@ public class DataObjectServiceImpl extends GenericServiceImpl<DataObject, Long>
721 681 }
722 682 }
723 683  
  684 + private void verifyColumnsForImport(DataObject sourceObject) {
  685 + List<DataColumn> columns = null;
  686 + Connection connection = dataSourceService.connect(sourceObject.getDataSource());
  687 + try {
  688 + columns = DataObjectUtil.buildColumns(sourceObject.getDataSource(), connection, sourceObject.getSchema(), sourceObject.getName());
  689 + } catch (Exception e) {
  690 + }
  691 +
  692 + Database database = sourceObject.getDataSource().getDatabase();
  693 + for (DataColumn dataColumn: sourceObject.getColumns()) {
  694 + DataColumn DBColumn = null;
  695 + if (columns != null) {
  696 + for (DataColumn col : columns) {
  697 + if (col.getName().equalsIgnoreCase(dataColumn.getName())) {
  698 + DBColumn = col;
  699 + break;
  700 + }
  701 + }
  702 + }
  703 +
  704 + dataColumn.setId(null);
  705 + String name = dataColumn.getType().getName();
  706 + if (DBColumn != null) {
  707 + dataColumn.setDatabaseType(DBColumn.getDatabaseType());
  708 + dataColumn.setType(DBColumn.getType());
  709 + }else{
  710 + dataColumn.setType(dataTypeService.findByName(name));
  711 + if (dataColumn.getType() == null) {
  712 + String databaseType = dataColumn.getDatabaseType() != null ? dataColumn.getDatabaseType() : name;
  713 + for (DatabaseDomain domain : database.getTypes()) {
  714 + if (domain.getName().equalsIgnoreCase(databaseType)) {
  715 + dataColumn.setType(domain.getDataType());
  716 + break;
  717 + }
  718 + }
  719 + }
  720 + }
  721 +
  722 + if (dataColumn.getType() == null) {
  723 + throw new EsiBusinessException("Tipo de dados '"+name+"' não encontrado");
  724 + }
  725 +
  726 + if (UtilString.isNullOrEmpty(dataColumn.getDatabaseType())) {
  727 + for (DatabaseDomain domain : database.getTypes()) {
  728 + if (domain.getDataType().getId().equals(dataColumn.getType().getId())) {
  729 + dataColumn.setDatabaseType(domain.getName());
  730 + break;
  731 + }
  732 + }
  733 + }
  734 +
  735 + if (UtilString.isNullOrEmpty(dataColumn.getDatabaseType())) {
  736 + throw new EsiBusinessException("Tipo de dados '"+name+"' não encontrado no BD");
  737 + }
  738 +
  739 + if (dataColumn.getWidget() != null) {
  740 + dataColumn.setWidget(formWidgetService.findByName(dataColumn.getWidget().getName()));
  741 + }
  742 + }
  743 + }
724 744  
725 745 }
726 746 \ No newline at end of file
... ...