close Warning: Can't synchronize with repository "(default)" (/var/svn/mms does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 14 years ago

Closed 14 years ago

#385 closed enhancement (fixed)

Metodos exists para objetos del repositorio

Reported by: irobles Owned by: Pedro Gea
Priority: major Milestone: Release 0.6
Component: Persistence Keywords:
Cc:

Description

Buenos días,

seria comodo tener metodos exists para objetos del repositorio para saber si ya estan cargados previamente o no.

Por ejemplo, igual que existen los metodos LoadDataSet o LoadModel, realizar los metodos DataSetExists, o ModelExists.

Extenderlo a todos los objetos, estimaciones, previsiones...

Change History (5)

comment:1 Changed 14 years ago by atorre

Creo que podrían existir dos métodos: uno para determinar si existe el objeto en el repositorio (Exist) y otro para comprobar si está cargado (Loaded).

Sigue una función para el Exist del objeto Model:


Real ModelExist(NameBlock repo, Text model, Text version)

{

Set modelList = repo::GetModelsList(?);
If(EQ(Card(modelList), 0), 0,
{

Set mSel = Select(modelList, Real(Set s)
{

And(s[1]==model, s[2]==version)

});
Case(EQ(Card(mSel), 0), 0,

EQ(Card(mSel), 1), 1,
1,
{

WriteLn("ModelExist:\n Existe mas de un modelo "+

model +" con version "+ version +" en el repositorio "+
repo::GetConnection(?), "E");

?

})

})

};

comment:2 Changed 14 years ago by Pedro Gea

Component: GeneralPersistence
Type: defectenhancement

Este tique está relacionado con #424. Podrían tratarse conjuntamente.

comment:3 Changed 14 years ago by Pedro Gea

El método que se propone como [Object]Exist está ya implementado como Find[Object]. Devuelve un valor real que corresponde a la posición o índice en la lista o catálogo de objetos de su tipo. Devuelve 0 si no lo encuentra.

De acuerdo a la implementación de este tipo de métodos no se produce un error si no se encuentra, aunque este método sí muestra una advertencia (warning) si se encuentra más de un objeto, de modo similar a como se ha propuesto.

comment:4 Changed 14 years ago by Pedro Gea

Si se desea saber si un objeto está cargado existen métodos Find[Object] pero del contenedor principal.
De modo que la llamada no sería:

Real isLoaded = <repository>::Is[Object]Loaded(...);

sino:

Real isLoaded = MMS::Container::Find[Object](...);

No hace falta si quiera la existencia de un repositorio de MMS para comprobar si un objeto está cargado.

Por ejemplo si se quieren encontrar los modelos de un repositorio que ya están cargados podríamos hacer:

Set Select(<repository>::GetModelsList(?), Real (Set modelInfo) {
  MMS::Container::FindModel(modelInfo)
})

comment:5 Changed 14 years ago by Pedro Gea

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.