public Retorno Cadastrar(FeicaoObjeto feicao) { LayerFeicao layerFeicao; LayerFeicaoBusiness layerFeicaoBus = new LayerFeicaoBusiness(); int id = 0; try { Hashtable filtros = new Hashtable(); filtros.Add("id", feicao.IdLayerFeicao); layerFeicao = layerFeicaoBus.Buscar(filtros); if (feicao == null) { return(new Retorno(false, "Layer Feição inválida", id, feicao.IdLayerFeicao)); } FeicaoGeometria geoFeicao = null; string mensagem; mensagem = string.Empty; geoFeicao = InstanciarObjeto(layerFeicao.TipoGeometria, feicao.Vertices, feicao.Atributos, feicao.Aneis); id = da.GerarId(layerFeicao.Sequencia); AtributoFeicao atributo = geoFeicao.Atributos.Find(delegate(AtributoFeicao a) { return(a.Nome.ToUpper() == layerFeicao.ColunaPK.ToUpper()); }); if (atributo != null) { atributo.Tipo = AtributoFeicao.TipoAtributo.Manual; atributo.Valor = id; } else { atributo = new AtributoFeicao(AtributoFeicao.TipoAtributo.Manual, layerFeicao.ColunaPK.ToUpper(), id); geoFeicao.Atributos.Add(atributo); } if (!da.Cadastrar(geoFeicao, geoFeicao.TabelaRascunho, layerFeicao.Id)) { return(new Retorno(false, "Erro ao cadastrar geometria", id, feicao.IdLayerFeicao)); } if (!da.ValidarGeometria(id, geoFeicao.TabelaRascunho, layerFeicao.ColunaPK, layerFeicao.Id, feicao.IdProjeto, out mensagem)) { da.Excluir(geoFeicao.ObjectId, geoFeicao.TabelaRascunho, layerFeicao.ColunaPK); return(new Retorno(false, mensagem, id, feicao.IdLayerFeicao)); } da.Transferir(layerFeicao.Schema, layerFeicao.Tabela, geoFeicao.TabelaRascunho, id); da.AtualizarAtributos(geoFeicao.Atributos, layerFeicao.Schema, layerFeicao.Tabela, id, layerFeicao.ColunaPK); LayerFeicaoBusiness.LimparCacheLayers(feicao.IdProjeto); } catch (Exception exc) { LogDa.Gerar(new { Exc = exc, Feicao = feicao }); return(new Retorno(false, exc.Message)); } return(new Retorno(true, "Cadastrado com sucesso!", id, feicao.IdLayerFeicao)); }
private FeicaoGeometria InstanciarObjeto(TipoGeometriaFeicao tipo, List <Vertice> vertices, List <AtributoFeicao> atributos, List <List <Vertice> > aneis = null) { FeicaoGeometria geoFeicao = null; switch (tipo) { case TipoGeometriaFeicao.Linha: geoFeicao = new Linha(vertices, atributos); break; case TipoGeometriaFeicao.Poligono: geoFeicao = new Poligono(vertices, atributos, aneis); break; case TipoGeometriaFeicao.Ponto: geoFeicao = new Ponto(vertices, atributos); break; } return(geoFeicao); }
internal bool AtualizarRascunho(FeicaoGeometria geoFeicao, int objectid, string tabelaRascunho, string primaryKey, int idLayerFeicao) { OracleConnection connection = null; OracleTransaction transaction = null; OracleCommand comando = null; FonteFeicaoOracleSpatial destino = null; try { if (geoFeicao == null) { throw new ApplicationException("Referência nula do objeto"); } string schemaUsuario = ConfigurationManager.AppSettings["SchemaUsuarioGeo"].ToUpper(); BancoDeDados bancoDeDados = BancoDeDadosFactory.CriarBancoDeDados("StringConexaoGeo"); destino = GetConexao(bancoDeDados); destino.Abrir(); connection = destino.Conexao; if (connection != null) { transaction = connection.BeginTransaction(); } comando = new OracleCommand("delete from " + tabelaRascunho + " t where t." + primaryKey + " = :objectid and t.feicao = :feicao ", connection); comando.Parameters.Add("objectid", OracleDbType.Int32); comando.Parameters["objectid"].Value = objectid; comando.Parameters.Add("feicao", OracleDbType.Int32); comando.Parameters["feicao"].Value = idLayerFeicao; comando.ExecuteNonQuery(); ClasseFeicao classeDestino = destino.ObterClasseFeicao(tabelaRascunho); FeicaoAdapter adpt = new FeicaoAdapter(classeDestino); OperadorFeicaoOracleSpatial operador = (OperadorFeicaoOracleSpatial)destino.ObterOperadorFeicao(tabelaRascunho); TecnoGeo.Geografico.Feicao feicao = classeDestino.CriarFeicao(); decimal srid = GetSrid(); OperacaoEspacial operacao = new OperacaoEspacialTransformacao(new CampoGeometrico(), srid, srid); feicao.Geometria = geoFeicao.RetornarGeometria(); if (feicao.Geometria == null) { throw new ApplicationException("Referência nula da geometria"); } foreach (AtributoFeicao a in geoFeicao.Atributos) { if (feicao.Atributos.IndiceDe(a.Nome.ToUpper()) < 0) { continue; } switch (a.Tipo) { case AtributoFeicao.TipoAtributo.Manual: feicao.Atributos[a.Nome.ToUpper()].Valor = a.Valor; break; case AtributoFeicao.TipoAtributo.Sequencia: adpt.Adaptadores[a.Nome.ToUpper()].Origem = TipoOrigem.Sequencia; adpt.Adaptadores[a.Nome.ToUpper()].Valor = a.Valor.ToString(); break; } } feicao.Atributos["FEICAO"].Valor = idLayerFeicao; operador.Inserir(adpt.Transformar(feicao), operacao); transaction.Commit(); } catch { if (transaction != null) { transaction.Rollback(); } throw; } finally { if (transaction != null) { transaction.Dispose(); } if (destino != null) { destino.Fechar(); } if (connection != null) { connection.Close(); connection.Dispose(); } } return(true); }
internal bool Cadastrar(FeicaoGeometria geoFeicao, string tabelaRascunho, int idLayerFeicao) { BancoDeDados bancoDeDados = null; if (geoFeicao == null) { throw new ApplicationException("Referência nula do objeto"); } string schemaUsuario = ConfigurationManager.AppSettings["SchemaUsuarioGeo"].ToUpper(); bancoDeDados = BancoDeDadosFactory.CriarBancoDeDados("StringConexaoGeo"); FonteFeicaoOracleSpatial destino = GetConexao(bancoDeDados); OperadorFeicaoOracleSpatial operador = null; try { destino.Abrir(); ClasseFeicao classeDestino = destino.ObterClasseFeicao(tabelaRascunho); FeicaoAdapter adpt = new FeicaoAdapter(classeDestino); operador = (OperadorFeicaoOracleSpatial)destino.ObterOperadorFeicao(schemaUsuario + "." + tabelaRascunho); Tecnomapas.TecnoGeo.Geografico.Feicao feicao = classeDestino.CriarFeicao(); feicao.Geometria = geoFeicao.RetornarGeometria(); if (feicao.Geometria == null) { throw new ApplicationException("Referência nula da geometria"); } foreach (AtributoFeicao a in geoFeicao.Atributos) { if (feicao.Atributos.IndiceDe(a.Nome.ToUpper()) < 0) { continue; } switch (a.Tipo) { case AtributoFeicao.TipoAtributo.Manual: feicao.Atributos[a.Nome.ToUpper()].Valor = a.Valor; break; case AtributoFeicao.TipoAtributo.Sequencia: adpt.Adaptadores[a.Nome.ToUpper()].Origem = TipoOrigem.Sequencia; adpt.Adaptadores[a.Nome.ToUpper()].Valor = a.Valor.ToString(); break; } } feicao.Atributos["FEICAO"].Valor = idLayerFeicao; decimal srid = GetSrid(); OperacaoEspacial operacao = new OperacaoEspacialTransformacao(new CampoGeometrico(), srid, srid); operador.Inserir(adpt.Transformar(feicao), operacao); operador.Fechar(); } finally { destino.Fechar(); } return(true); }