Sujet |
Description |
Statut |
Par |
Type |
Priorité |
Version |
Catégorie |
Date de création |
In wikitty add support for 'variant' |
Le but est d'ajouter la notion de 'variant' sur les valeurs des 'wikitty'. Le wikitty reste comme il est mais en plus contient une map variant avec en cle le nom du variant et en valeur un objet 'WikittyVariant' qui contient
protected HashMap fieldValue = new HashMap();
protected Set fieldDirty = new HashSet();
comme un wikitty. (peut-etre faire un peu de factorisation dans wikitty pour avec une variant par defaut (ex: "") ce qui permettrait de traiter le wikitty et les variantes de la meme facon).
Il faut donc modifier les storages pour stocker les variants et les restorer, et modifier l'indexation pour les indexer. Pour le stockage il suffit peut-etre de prefixer les noms de champs des variants par le nom du variant. Pour l'indexation peut etre simplement indexer de la meme facon, mais prefixer l'id du document lucene par le variant, et ajouter un nouveau champs pour l'id du wikitty. De cette facon on peut bien faire des recherches sur les champs (il porte le meme nom).
Exemple d'utilisation:
I18n: un variant par langue (fr, en, es, ...)
prix: un variant par monnaie (euro, dollars, livre, ...) |
Nouveau |
- |
Evolution |
Normal |
futur |
- |
- |
Add wikitty-publication wars in redmine files |
|
Nouveau |
- |
Tâche |
Normal |
futur |
- |
- |
Add xmpp as protocol cache synchronisation |
Actuellement pour synchroniser les caches des clients on peut utilise cajo. Mais il serait bien de pouvoir utiliser xmpp, cela permettrait d'avoir des clients sur des reseaux completement distinct.
Le serveur wikitty lance un serveur xmpp ou reutilise un serveur specifie dans le fichier de configuration. Il cree une room dont il trouve le nom dans le fichier de configuration et a chaque fois qu'il fait un store ou remove au sync, il envoie sur la room un numero de sequence + la liste des ids impactes par l'action.
Les clients qui utilise le cache et veulent etre notifier se logguent dans la room. Ils conservent le dernier numero de sequence. Si le numero de sequence suivant n'est pas juste le suivant, alors on efface tout le cache. si old numero + 1 = new numero alors on supprime seulement les id envoyes. |
Nouveau |
- |
Evolution |
Normal |
futur |
API |
- |
Add xmpp server in WikittyServerStart |
WikittyServerStart must be able to start xmpp server if configuration ask it (if we don't want use external xmpp server).
If possible try to use same servlet container that WikittyServiceHessianServer |
Nouveau |
- |
Evolution |
Normal |
futur |
- |
- |
new wikitty-publication module |
see http://svn.nuiton.org/svn/wikitty/trunk/wikitty-publication/src/site/rst/wp-analyse.rst |
Nouveau |
- |
Evolution |
Normal |
futur |
- |
- |
Add a transporter based on Cajo |
We got a client/server communication using cajo, we got a transporter using xmpp, it should be great to also have a transporter using Cajo |
Nouveau |
- |
Evolution |
Bas |
futur |
API |
- |
new wp-maven-plugin |
The wp-maven-plugin will help to run wikitty publication tasks froma maven project. |
Assigné |
tchemit |
Evolution |
Normal |
futur |
- |
- |
Init database at application startup in wikitty-publication |
I try to launch the war of wikitty-publication but I had no data :(
Two choices are offered :
- create datas when application starts (via a ServletcontextListener)
- create a init page which ask user more admin informations |
Nouveau |
- |
Evolution |
Normal |
futur |
WP |
- |
add new field type: GeoPoint for latitude, longitude |
De plus en plus d'application utilise des données spatiales, il serait bon que Wikitty permette de les stocker et les gérer facilement.
SolR permet déjà de gérer ce type au travers de LatLonType (il y a aussi PointType qui est plus pour les espaces a N dimensions ou les plan, LatLonType est plus pour le support des coordonnées géographiques sphérique)
http://wiki.apache.org/solr/SpatialSearch |
Nouveau |
- |
Evolution |
Normal |
5 |
API |
- |
add new field type: CURRENCY |
Il serait bien de proposer un type CURRENCY qui permettent de faire des recherches sur des sommes quelle que soit la valeur.
10 euros = 13 dollars
Donc si on recherche amount > 11 dollars on aurait en résultat tous les objets quelque soit la monnaie qui correspondent à la demande.
Il y a dans SolR le type CURRENCY et un mécanisme de conversion automatique (basé sur un fichier ou un service web)
documentation: http://wiki.apache.org/solr/CurrencyField
Il faut prévoir l'écriture de son propre provider (ExchangeRateProvider) qui va chercher la conversion des monnaies dans la base wikitty extension WikittyCurrency ce qui permet d'éditer facilement les taux de change en modifiant/créer un objet wikitty
Les questions qu'il reste est comment écrire les monnaies dans les requetes:
10dollars
10 euros
10,euros
euros(10)
autre ?
Comment permettre l'utilisation du symbole et du texte:
dollars = $
euros = €
Il faut peut-être créer un type Currency(montant, monnaie) |
Nouveau |
- |
Evolution |
Normal |
5 |
API |
- |
Improve WikittyQuery SolR transformation for function with SolR func |
SolR support function in query and fl. We can register new function in solrconfig.xml.
function usage: http://wiki.apache.org/solr/FunctionQuery
function creation: http://www.solrtutorial.com/custom-solr-functionquery.html
With that we can transfert some function evaluation from java to Solr.
Create generic solr function to encapsulate all user defined simple function (not aggregate).
example:
wikitty query: select package.MyClass#myFunc(field1, field2) AS my where ...
solr query: fl=my:wikittyFunction("package.MyClass#myFunc", field1, field2)&q=...
Use it for function in Wikitty WHERE clause too |
Nouveau |
- |
Evolution |
Normal |
5 |
SolR |
- |
Improve WikittyQuery SolR transformation for sub query clause with SolR {!join} |
Solr permet maintenant de lier deux recherches via le parser join. Couplé avec les sous requêtes que permet SolR, on pourrait modifier la transformation pour éviter de devoir jouer deux requêtes là ou l'on peut en faire 1 seule. Il n'est a priori pas possible de faire un join dans un join donc seul un niveau fonctionne.
Exemple de requête solr avec un join:
q=Invoice.amount:1019 AND _query_:{!join from=#id to=Invoice.payer}Company.name:BigBrother
La requête Wikitty que cela remplacerait:
Invoice.amount=1019 AND Invoice.payer={SELECT id WHERE Company.name=BigBrother}
documentation: http://wiki.apache.org/solr/Join |
Nouveau |
- |
Evolution |
Normal |
5 |
SolR |
- |
Improve WikittyQuery SolR transformation for Select clause with SolR fl param |
for simple select (select field) it's possible to use fl param in Query
example:
SolrQuery querySolr = new SolrQuery(query);
querySolr.setParam("fl", "#id,ref:FinancialTransaction.reference_s,amount:FinancialTransaction.amount_d,tva:FinancialTransaction:VAT_d,payer:FinancialTransaction.payer_w");
It's possible to declare alias for field with "[alias]:[realy field name]"
It's possible to use SolR function in list with "sum([field1], [field2])" work with alias too
but for field with '#' there is bug, fl doesn't accept '#' in field see bug report https://issues.apache.org/jira/browse/SOLR-4524
before implement this improvement, this bug report must be closed or you can create new transformer to transforme #id to id. fl=#id become fl=[id]
see documentation on transformer: http://wiki.apache.org/solr/DocTransformers and http://lucene.apache.org/solr/api/solr-core/org/apache/solr/response/transform/TransformerWithContext.html |
Nouveau |
- |
Evolution |
Normal |
5 |
SolR |
- |
Change propertyChangeListener on generated business entity |
Actuellement on peut mettre des listeners sur les wikitties mais aussi sur les entites generees. Mais ce sont deux choses differentes. Il faut modifier l'implantation pour que les business entities sur les add/remove delegue au wikitty sous jacent.
De cette facon, il n'y a plus rien a faire sur le business (pas de fire, ils sont fait directement par le wikitty). |
Nouveau |
- |
Evolution |
Normal |
4 |
Generation |
- |
Change facet implementation to permit to define mincount, offset, limit and sort per facet |
Actuelle on peut positionner l'ordre de tri et le nombre de resultat max a retourner pour toutes les facettes. Mais il peut-etre utile de pouvoir fixer cela pour chaque facette.
entre autre:
- mincount
- sort
- limit
- offset
Pour voir les options a passer a solr voir: http://wiki.apache.org/solr/SimpleFacetParameters |
Nouveau |
- |
Evolution |
Normal |
4 |
API |
- |
Add Map field type |
Actuellement on peut avoir des collections List ou Set. Il serait bien d'avoir aussi des collections Map comme champs. Cela est différent d'un wikitty, car un wikitty a un nombre de champs et des noms de champs prédéfinis.
La clé est toujours une String. La valeur peut-etre de n'importe quel type accepté par Wikitty.
h2. Définition
String tagValue map=true
Wikitty field map=true
C'est un tag value sur le champs qui indique si ce champs est une map ou un simple champs.
Pensez a modifier l'implantation de FieldType.isCollection pour retourner vrai pour une map. Et recherche les implications que cela à dans d'autre méthode.
Lorsqu'un champs est une map, le upperbound est automatiquement mis à '*'.
h2. Utilisation
De nouvelle méthode seront ajouter sur le Wikitty pour géré les champs de type map
getFieldAsMap(extName, fieldName):Map ( en lecture seul)
putToField(extName, fieldName, key, value):Object (l'ancienne valeur ou null; si value vaut null, cela revient a supprimer cette clé)
getFieldAsXXX(extName, fieldName, key)
on reutilise la methode clear pour les maps
Les méthodes équivalentes seront générées sur l'entité métier
h2. Stockage
De la même façon qu'on stocke les listes avec nomdechamps[n/m] on stockera le champs avec pour chaque entrée dans la map une ligne dans la base nomdechamps[key]
h2. Indexation
extName.fieldName:key=value (une fois pour chaque entrée de la map)
extName.fieldName.keys:liste des keys
extName.fieldName.values:liste des values
La premiere indexation permettra de faire une recherche précise. La deuxième de faire une recherche sur une cle, et la derniere sur une valeur. |
Nouveau |
- |
Evolution |
Normal |
4 |
API |
- |
Delete all deprecated API (criteria, ...) |
|
Nouveau |
- |
Evolution |
Normal |
4 |
- |
- |
Web administration application for wikitty |
Faire une application web d'administration generique de wikitty:
- capable d'etre pre-configurer (fichier) ou configurable via une page specifique
pour pouvoir aller sur n'importe quelle instance de Wikitty
- CRU d'extension
- CRUD de wikitty
- export/import CSV/XML
On doit pouvoir recuperer des choses de wikitty-publication. Ce nouveau module pourrait ensuite servir de base pour l'interface de wikitty-publication |
Nouveau |
- |
Evolution |
Normal |
4 |
- |
- |
Change database model to support easily collection |
Actuellement pour stocker les collections on est obligé d'ajouter au bout des noms de champs [n/m]. Il serait plus simple d'ajouter une colonne 'index' dans lequel on stocke l'indice de l'element de la collection. Que l'element soit un Set, une List ou une Map.
Cela devrait simplifier le sockage et la restauration. Il suffirait de faire un 'order by' index. et ajouter les valeurs aux collections fur et a mesure qu'on lit le resultSet.
La cle deviendrait alors (id,fieldname, index)
Pour l'ajout d'un champs on Map peut-etre faire: 000000000-key, 000000001-Key, ...
Gere-t-on automatiquement la migration du schema des bases existantes ? en tout cas il faut essayer. |
Nouveau |
- |
Evolution |
Normal |
4 |
JDBC |
- |
Add last writer in WikittyAuthorisation or other specific extension |
When someone try to write or delete a wikitty. We can add this user in WikittyAuthorisation of this object as lastWriter or in other specific extension if is not possible in WikittyAuthorisation. |
Nouveau |
- |
Evolution |
Normal |
4 |
- |
- |
Select condition create backdoor access to all data |
Si on utilise la condition select, les données sont extraites directement au plus bas niveau (WikittySearchEngine) lorsqu'on arrive au service de securite, il ne peut donc plus verifier si l'utilisateur avait le droit ou non de lecture sur ce champs.
Il faudrait donc conserver dans le WikittyQueryResult en plus de la liste des résultats, une map qui indique pour chaque resultat depuis qu'elle wikitty(id) il est issu. Mais cela est compliqué, car les selects sont issu de facet, il faudrait donc faire une autre requete pour retrouver les id :(.
L'autre facon de faire serait de forcer l'ajout dans les requetes par le service de security les conditions tel que decrit dans le ticket #1871 si la requete est une requete select.
Cette deuxieme solution est beaucoup plus viable et plus simple |
Nouveau |
- |
Anomalie |
Normal |
4 |
API |
- |
Change query in Security service to add condition on user logged for right management |
Actuellement le service de security verifie lors du chargement que l'utilisateur a bien le droit charger l'objet, si ce n'est pas le cas, il le remplace par null dans la liste.
Pour minimiser ce travail, et permettre a l'utilisateur de ne pas avoir de null dans la liste, il faut ajouter sur l'objet query une variable checkAutorisation qui prend sa valeur par defaut en fonction d'une option de configuration. Mais que le developpeur peut modifier sur son objet query.
Si checkAutorisation est vrai alors le service de securite ajoute sur toutes les requetes les bonnes conditions pour que si l'utilisateur n'a pas le droit en lecture sur un objet qu'il ne soit pas retourne.
De cette facon, ne remonte que des Ids que l'utililsateur peut voir. Il restera toujours un check au restore, car l'utilisateur peut recuperer un objet directement a partir de son Id et pas seulement grace a une requete. |
Assigné |
bpoussin |
Evolution |
Normal |
4 |
API |
- |
Document new Select behaviour for user |
Le select peut maintenant prendre autant de parametre que souhaite, il retourne une Map.
Il est possible d'appler ces propres fonctions. |
Nouveau |
- |
Evolution |
Normal |
4 |
documentation |
- |
Move Treenode with child, move TreeNode but not child |
Si un Noeud a des enfants et qu'on déplace ce noeud dans l'arbre. Les enfants ne sont pas bien réindexé (on ne les retrouve plus via la recherche d'arbre a partir de ce noeud)
(un exemple d'utilisation est dans chorem, lorsqu'on bouche une categorie qui a des sous categories) |
Nouveau |
- |
Anomalie |
Normal |
4 |
API |
- |
Document new Select behaviour for developper |
Expliquer comment a été mis en place la nouvelle implantation du Select
c-a-d List |
Nouveau |
bpoussin |
Evolution |
Normal |
4 |
documentation |
- |
Enhance query language to permit dashboard creation easiest |
Le but est d'améliorer le langage de requête (et le QueryMaker) pour offrir la possibilité de facilement créer des rapports.
Par exemple, si on a des factures qui ont des items, et que l'on souhaite avoir la liste des factures avec pour chaque ligne la somme des items de la facture. Et en plus la somme totale de toutes les factures.
Il faudrait pouvoir faire des choses commes:
Select Id, firstNotNull(Facture.client.personne.name, Facture.client.name, "pas de client") AS Client, sum(select item.prix where item.facture=Facture.id) AS Prix where Facture.date>Date(01/01/12)
Puis avant de jouer la requete:
query.addGlobalResult("Total", "sum(Prix)");
Le QueryResult aurait donc des méthodes pour accéder au global result: result.getGlobalResult("Total")
Et les objets retournés seraient marqué comme étant des WikittyProjection (généré pour ce résultat) et contiendraient les champs demandé (nommé avec leur alias si on utilise AS) et un nouveau champs Prix (qui est la somme des items de la facture)
Ces WikittyProjection auraient donc des champs n'appartenant pas a une extension, il ne seraient pas modifiables et ne seraient pas sauvegardables.
On a alors dans le queryResult tout ce qu'il faut pour afficher un joli tableau et la somme total en bas |
Nouveau |
- |
Evolution |
Normal |
4 |
API |
- |
add group by clause in Query to group on specific field |
On pourrait permettre de grouper les resultats en fonction d'un champs, le resultat retourné serait alors une map de resultat, avec en cle la valeur du champs. Cela se rapproche des facets mais permet plus de choses car au lieu du champs on recuperer l'objet lui meme. L'interet est de faire une seul requete au lieu de N actuellement pour certain besoin.
au lieu de:
SELECT sum(Invoice.amount) as ca WHERE extension=Invoice AND date=[date(01/01/2012) TO date(31/01/2012)]
ce qui donnerait comme résultat: {ca:789}
et il faut refaire la requête pour les autres années
on pourrait faire:
SELECT sum(Invoice.amount) as ca WHERE extension=Invoice GROUPBY date
ce qui donnerait comme résultat: {2010:{ca:123}, 2011:{ca:456}, 2012:{ca:789}}
ce qui devient en solr query (seulement la clause where):
q=extension:Invoice&group.func=year(date)&group.limit=2000000
Il faut que la fonction year existe et retourne l'annee de la date. On aura alors en resultat N groupe, un groupe par an sur lequel le select pourra s'appliquer.
documentation des groupes: http://wiki.apache.org/solr/FieldCollapsing |
Nouveau |
- |
Evolution |
Normal |
4 |
API |
- |
Add Unit test on WikittyUtil.toDate, this method accept now Date Math |
Les calculs sur les dates ne sont pas bien testé dans les tests. Il faut les ajouter. |
Nouveau |
- |
Evolution |
Normal |
3.14 |
- |
- |
Add documentation about Date Math syntax |
Il est possible maintenant pour une date de faire des choses comme:
- NOW+1DAY
- TODAY+3MONTHS
- date(12/12/2014+3HOURS)
- ...
Mais il n'y a pas de documentation dessus.
la javadoc indique:
/HOUR
... Round to the start of the current hour
/DAY
... Round to the start of the current day
=????1130
... keep year but set date to 30 november
:12??30
... keep minute but set hour to 12 and seconde to 30
+2YEARS
... Exactly two years in the future from now
-1DAY
... Exactly 1 day prior to now
/DAY+6MONTHS+3DAYS
... 6 months and 3 days in the future from the start of
the current day
+6MONTHS+3DAYS/DAY
... 6 months and 3 days in the future from now, rounded
down to nearest day |
Résolu |
bpoussin |
Evolution |
Normal |
3.13 |
- |
- |
Add Wikitty service authentication that not raise exception we try to load unauthorise wikitty |
If we don't have read access on wikitty, wikitty is replace by null. All other result is returned. |
Résolu |
bpoussin |
Evolution |
Normal |
3.13 |
API |
- |
If try to load wikitty with bad id, or if we don't have access to wikitty, there is exception during conversion |
|
Résolu |
bpoussin |
Anomalie |
Normal |
3.13 |
API |
- |
containsOne and containsAll with an empty collection returns all objects but no object should have been returned |
bug during conversion from wikitty query to solr query.
false condition must be something like: (#id:* -#id:*) and not (#id:* - #id:*). The différence is in blank between '-' and '#id' |
Résolu |
bpoussin |
Anomalie |
Normal |
3.12.1 |
SolR |
- |
Migrates to git |
|
Résolu |
tchemit |
Tâche |
Normal |
3.12 |
- |
- |
add support of special wikittyId 'all' for reader/writer/admin in WikittyAuthorisation |
for reader if there is no User and no Group, wikitty is publicaly readable. But in some circonstance, it's more useful to mark publicaly readable with 'all' in list of id for reader. This id 'all' is not valid id because is not a UUID and no Wikitty can have it. |
Résolu |
bpoussin |
Evolution |
Normal |
3.12 |
API |
- |
WikittyAuthorisation reader/write/admin is WikittyUser, but we can add WikttyGroup too |
Change type of reader/write/admin to Wikitty and add allow WikittyUser and WikittyGroup |
Résolu |
bpoussin |
Anomalie |
Normal |
3.12 |
API |
- |
Authorise multiple parent for WikittyAuthorisation |
In some case, we want to have multiple parent for one authorisation. Authorisation, is aggregation of all parent |
Résolu |
bpoussin |
Evolution |
Normal |
3.12 |
API |
- |
Simplify field cardinality migration |
When change field cardinality N to 1 or 1 to N, wikitty must migrate automaticaly field value |
Résolu |
bpoussin |
Evolution |
Normal |
3.12 |
API |
- |
Updates dependencies |
* nuiton-utils *2.6.9* -> *3.0-rc-2*
3.11 3.13 develop index.html index.html~ latest versions use now nuiton-config (was before in nuiton-utils)
3.11 3.13 develop index.html index.html~ latest versions i18n *2.4.1* -> *3.0*
3.11 3.13 develop index.html index.html~ latest versions nuiton-web *1.3* -> *1.15-alpha-3*
3.11 3.13 develop index.html index.html~ latest versions eugene *2.4.2* -> *2.7.4*
3.11 3.13 develop index.html index.html~ latest versions processor *1.1* -> *1.3*
3.11 3.13 develop index.html index.html~ latest versions jbossjta *4.16.2.Final* -> *4.16.3.Final* |
Fermé |
tchemit |
Tâche |
Normal |
3.12 |
- |
- |
Problem in properties copy with commons-beanutils upgrade |
There is some changes between current commons-beanutils version (1.8.3) and next version (1.9.x) :
During the copy, the properties are not set in same order.
With 1.8.3 version, the "wikittyVersion" property was the last to be copied. This behaviour was useful to avoid the version upgrade with each set on other properties.
But, with 1.9.0 version, this kind of order is not guaranted, and so the wikittyVersion could be set before other properties and when those properties and set, the version is upgraded.
Three tests fail with the commons-beanutils version upgrade:
BusinessEntityImplTest.testCopyFrom
WikittyUtilTest.testCopyBean
WikittyUtilTest.testCopyFrom
During copy, we should force the version copy last. |
Résolu |
- |
Anomalie |
Normal |
3.11 |
API |
- |
When wikitty open multiple solr server on same data file, solr index is corrupted |
Il faudrait que ne pas instancier plusieurs solr serveur si on detecte qu'ils vont utiliser les memes fichiers |
Résolu |
bpoussin |
Anomalie |
Haut |
3.10 |
SolR |
- |
add new select function to get year of date |
ex:
select year(birthday) where ... |
Résolu |
bpoussin |
Evolution |
Normal |
3.10 |
API |
- |
Change upgrade data process |
Actuellement si on inverse l'héritage entre extension, le processus de migration échoue.
Un refonte de la migration doit pouvoir:
- supporter l'inversion d'héritage
- la création de données durant la migration |
Résolu |
bpoussin |
Evolution |
Normal |
3.10 |
API |
- |
Add new method to WikittyClient and BusinessHelper to remove extension easily |
Actuellement on a une methode sur les wikitty pour enlever une extension et ces dependances. Il faudrait ajouter des methodes sur le Client et le Helper pour simplifier sont utilisation |
Résolu |
bpoussin |
Evolution |
Normal |
3.10 |
API |
- |
migrate to solr 4.1 and cleaning solrconfig.xml |
Le fichier solrconfig.xml contient beaucoup de chose inutile, profiter de la migration vers solr4.1 pour le nettoyer |
Résolu |
bpoussin |
Evolution |
Normal |
3.10 |
SolR |
- |
Change select implementation to do only one solr request |
L'implantation de select utilise 2 requetes car actuellement toutes les facettes ont les meme order et limit.
Une fois l'evolution #1995 faite, on pourra reimplanter le select pour ne faire qu'une requete. |
Fermé |
- |
Evolution |
Normal |
3.10 |
API |
- |
Add support of new method in query language |
Le but est de pouvoir ecrire des choses comme:
Select firstNotNull(Facture.client.personne.name, Facture.client.name, "pas de client") where Facture.date > Date(01/01/12)
Ici firstNotNull et Date sont des méthodes que l'on recherche dans le objet spécifier dans la requête.
Pour que toutes les query en profite:
Query.addGlobalMethod(new MonObjectAvecLesMethodes());
Pour que seul cette query en profite:
maQuery.addMethod(new MonAutreObjet());
Prévoir aussi l'utilisation dans QueryMaker |
Fermé |
- |
Evolution |
Normal |
3.10 |
API |
- |
Improve WikittyQueryResult, result must have wikitty id and select result in same time |
Actuellement, un resultat retourne des id s'il n'y pas de select, on les données du select s'il y en a un.
Il serait preferable que le result contiennent les deux tout le temps (sauf s'il n'y a pas de select). On pourra ainsi et recuperer les id, et les valeurs du select sans devoir faire deux requetes.
Cette nouvelle implantation va facilite l'implatation du WikittyServiceTransaction pour la fusion des resultats. |
Résolu |
bpoussin |
Evolution |
Normal |
3.10 |
API |
- |
Update to solr and lucene 4.0 |
|
Fermé |
jcouteau |
Evolution |
Normal |
3.10 |
SolR |
- |
Support relative date for String date representation |
Le but est de pouvoir mettre dans un champs date "now" ou "today" ou "now+1month" ...
now/day+1month+2weeks+4hours (maintenant arrondi au debut de journée + 1mois + 2 semaines + 4 heures)
now+3Years/Month (maintenant + 3 ans arrondi au mois) |
Résolu |
bpoussin |
Evolution |
Normal |
3.10 |
API |
- |
remove extension in wikitty object |
Il n'existe aucune methode pour supprimer une extension sur un wikitty. Il faut ajouter une methode removeExtension(String) qui supprime l'extension et toute les extensions qui en dependent |
Résolu |
bpoussin |
Evolution |
Normal |
3.9 |
API |
- |
Wikitty query staring with space pasing throw NullPointerException |
A unit test has been added for this.
Parsing query " xxx" displya following error message:
Parse Errors:
Invalid input 'x', expected ' ', 't', 'f', "NOT", '(', "#OFFSET", "#LIMIT", "#DEPTH" or EOI (line 1, pos 2):
xxx
and throw following exception:
java.lang.NullPointerException
at org.nuiton.wikitty.query.WikittyQueryMakerAbstract.parse(WikittyQueryMakerAbstract.java:266)
at org.nuiton.wikitty.query.WikittyQueryTest.testParseSpaceStart(WikittyQueryTest.java:446)
|
Résolu |
bpoussin |
Anomalie |
Normal |
3.9 |
API |
- |
add default value tag for wikitty field definition |
Il est impossible de fixer une valeur par defaut. Au depart tous les champs sont null.
En ajoutant un tag/value 'default' que l'on peut positionner sur un champs, le champs des l'ajout de cette extension sur un wikitty prendrait cette valeur. |
Résolu |
bpoussin |
Evolution |
Normal |
3.9 |
API |
- |
enhance parser to support empty query as True |
Le parseur s'il n'y a aucune recherche demandée doit interpréter ça comme une condition TRUE. |
Résolu |
bpoussin |
Evolution |
Normal |
3.9 |
API |
- |
Enhance parser to support #depth as WikittyFieldSearchDepth |
Il faut ajoute le parsing de #depth pour pouvoir indiquer la profondeur de recherche sur les champs de type wikitty. |
Résolu |
bpoussin |
Evolution |
Normal |
3.9 |
API |
- |
Make select clause more useful: return more than one value, use user function, ... |
L'implantation actuelle ne permet que de retourner une seul valeur.
Il serait utile pour évite de faire plusieurs fois la même requête de permettre des choses commes:
select min(Invoice.date), max(Invoice.date) where extension=Invoice
select Sum(MultTVA(Invoice.amount, Invoice.vat)) where extension=Invoice
Dans le deuxieme exemple MultTVA est une fonction ecrite par l'utilisateur de Wikitty |
Résolu |
bpoussin |
Evolution |
Normal |
3.9 |
API |
- |
Add DISTINT clause for SELECT query |
Actuellement lorsqu'on fait un SELECT, il n'est pas possible de récupérer les doublons. Cela pose des soucis pour les agrégats qui ne retourne pas le résultat attendu.
L'ajout de ce mot clé permettra d'utiliser réellement les fonctions d'agrégat.
SELECT DISTINCT Invoice.customer WHERE Invoice.status='CANCELED'
Retourne une liste d'id de customer sans doublon |
Résolu |
bpoussin |
Evolution |
Normal |
3.9 |
API |
- |
add a date format translator in the query parser when the field to compare is a date |
Exemple :
search?query=Invoice.postedDate>*dateFormat("01/01/2012")*
permet de faire :
search?query=Invoice.postedDate>"2012-01-01T00:00:00.000+0000Z" |
Résolu |
bpoussin |
Evolution |
Normal |
3.9 |
API |
- |
Wikitty is not indexed when you add an extension |
If you got a wikitty and add only an extension to it (no field modification), it is saved into database but not indexed. |
Résolu |
jcouteau |
Anomalie |
Normal |
3.9 |
SolR |
- |
Wikitty purifier template generate accessor for non navigable association |
|
Résolu |
echatellier |
Anomalie |
Normal |
3.9 |
Generation |
- |
Field extension order seems to be not maintened with JDBC storage |
Normalement l'ordre des champs devrait être celui de l'ordre de déclaration.
Mais avec l'implantation JDBC l'ordre n'est pas maintenu.
Plutôt que de modifier l'implantation JDBC, autant faire quelque chose de plus générique qui permette de modifier l'ordre si on le souhaite.
ajout du tag: TAG_FIELD_ORDER à la génération qui indique l'ordre.
Le développeur peut ensuite modifier ce tag dans le fichier de properties pour prendre une autre valeur que la valeur par défaut.
Cette valeur est une valeur réel pour permettre l'insertion facile d'un élement entre deux autres, sans devoir tous les renuméroter.
Par défaut les valeurs sont: 1, 2, 3, 4, ...
il est possible de modifier le 3 pour avoir: 1, 1.5, 2, 4, ... |
Résolu |
bpoussin |
Anomalie |
Normal |
3.8 |
API |
- |
When we have query with aggregate and use findByQuery the result is false |
Si on a une requête avec une agrégation (ex: SELECT SUM numbre WHERE ...)
et qu'on utilise findByQuery puisqu'on attend qu'un seul resultat. Cela ne fonctionne pas. Car le findByQuery modifie le limit à 1. Or même si on a bien un seul resultat, il faut conserver le offset et le limit positionné par l'utilisateur. |
Résolu |
bpoussin |
Anomalie |
Normal |
3.8 |
API |
- |
BusinessEntity with Wikitty Field must be capable to use preload for this field |
Actuellement, seul le champs de type BusinessEntity peuvent etre en preload.
Il faut que les champs de type Wikitty peuvent aussi l'etre dans les classes generes (existance des methodes) |
Résolu |
bpoussin |
Evolution |
Normal |
3.8 |
API |
- |
Wikitty and BusinessEntity interface must have same methods name for same behaviour |
BusinessEntity et Wikitty utilise des noms de methodes différentes pour faire la meme chose.
Il faut unifier les noms de methodes pour peut-etre dans le futur faire de qu'un objet Wikitty puisse etre aussi un BusinessEntity |
Résolu |
bpoussin |
Evolution |
Normal |
3.8 |
API |
- |
Add parse method to WikittyQueryMaker |
Il serait plus simple d'avoir une methode parse sur le WikittyQueryMaker pour pouvoir mixer des bout de requete textuel avec des choses plus formel.
exemple:
WikittyQuery q = new WikittyQueryMaker().and()
.parse(queryString)
.eq("status", "open")
.end();
Il faut que parse accepte un queryString vide ou null sans erreur (dans ce cas n'ajoute aucune condition)
query string pourrait etre un filtre ecrit par l'utilisateur via un zone texte |
Résolu |
bpoussin |
Evolution |
Normal |
3.7 |
API |
- |
add new query property wikittyFieldSearchDepth on query that permit to follow link between wikitty for search |
Si un objet a un lien vers un autre et qu'on souhaite recherche des choses en fonction de ce qu'il y a dans l'objet pointe. Il faut utilise un select dans la requete ce qui la complexifie enormement.
Une recherche pour numero de telephone pour une personne donnée si en fait l'objet contenant le numero a un lien vers un objet Person, la requete deviendrait
"MonNom Phone"
au lieu de
"Phone AND Phone.person={select ID where Person.name=MonNom}"
On peut vouloir descendre à plus d'un niveau, il faut donc permettre d'indiquer le niveau souhaité (ATTENTION, il y a une requete par mot en plus) |
Résolu |
bpoussin |
Evolution |
Normal |
3.7 |
API |
- |
Be able to set a File on a binary field |
|
Résolu |
ymartel |
Evolution |
Normal |
3.7 |
- |
- |
add extContainsOne method on WikittyQueryMaker |
On a actuellement extContainsAll mais pas extContainsOne, il serait plus pratique d'avoir les deux |
Résolu |
bpoussin |
Evolution |
Normal |
3.7 |
API |
- |
Error in findTreeNode client method when Node depth + depth asked > Integer.MAX_VALUE |
Lorsque la profondeur de recherche est fixée à un très grand nombre, lorsque le framework ajoute à ce nombre la profondeur du noeud de départ, il y a débordement et on se retrouve avec un nombre négatif.
Il faut donc vérifier et s'il y a débordement, on fixe la valeur a Integer.MAX_VALUE |
Résolu |
bpoussin |
Anomalie |
Normal |
3.7 |
SolR |
- |
Error when we try to search containsAll or containsOne with empty collection |
la requete solr genere divient ":()" ce qui n'est pas valide. Le remplacer par false |
Résolu |
bpoussin |
Anomalie |
Normal |
3.6 |
SolR |
- |
Add elapsed time in QueryResult |
mettre le temps d'execution des requetes dans Result voir WSEngineSolr:752 -> QueryResponse.getElapsedTime(); |
Résolu |
bpoussin |
Evolution |
Normal |
3.5 |
API |
- |
Add sort-order tag value as toString tag value |
Actuellement on a un toString en tag value pour les extensions, il serait pratique d'avoir la meme chose pour pouvoir avoir un tri par defaut pour chaque extension. (Affichage générique d'une extension).
En fait, il n'y a rien a faire, juste declarer une constante et la documenter. |
Résolu |
bpoussin |
Evolution |
Normal |
3.5 |
API |
- |
(Not)Equals must be ignore case and ignore accent if needed |
Actellement on a un equals strict un like en fulltext, mais il faudrait quelque chose entre les deux: recherche en ignorant la case et les accents. Le mieux est d'ajouter un flag sur Equals et NotEquals pour indiquer si on veut l'egalite strict (celle par defaut) ou non |
Résolu |
bpoussin |
Evolution |
Normal |
3.5 |
API |
- |
Binary field are corrupted during restore |
This bug is illustrated by test @testStorageBinaryField@.
It runs fine in memory mode, but fails with jdbc storage. |
Rejeté |
bpoussin |
Anomalie |
Normal |
3.5 |
API |
- |
Query limit set to MAX (or -1) won't work |
This bug is illustrated by test : @WikittyClientTest#testPaginedSearchSelect@
Using @query1.setLimit(WikittyQuery.MAX);@ cause following exception:
org.nuiton.wikitty.WikittyException: Error during find
at org.nuiton.wikitty.services.WikittyServiceStorage.findAllByQuery(WikittyServiceStorage.java:980)
at org.nuiton.wikitty.services.WikittyServiceDelegator.findAllByQuery(WikittyServiceDelegator.java:191)
at org.nuiton.wikitty.WikittyClient.findAllByQuery(WikittyClient.java:795)
at org.nuiton.wikitty.WikittyClient.findAllByQuery(WikittyClient.java:805)
at org.nuiton.wikitty.WikittyClientTest.testPaginedSearchSelect(WikittyClientTest.java:1690)
Caused by: java.lang.IllegalArgumentException: fromIndex(0) > toIndex(-1)
at java.util.SubList.(AbstractList.java:604)
at java.util.RandomAccessSubList.(AbstractList.java:758)
at java.util.AbstractList.subList(AbstractList.java:468)
at org.nuiton.wikitty.storage.WikittySearchEngineHelper.findAllByQueryWithSelect(WikittySearchEngineHelper.java:146)
at org.nuiton.wikitty.storage.solr.WikittySearchEngineSolr.findAllByQuery(WikittySearchEngineSolr.java:665)
at org.nuiton.wikitty.services.WikittyServiceStorage.findAllByQuery(WikittyServiceStorage.java:961)
... 29 more
|
Résolu |
bpoussin |
Anomalie |
Normal |
3.5 |
API |
- |
Add tag value wikitty-extension on field of type Wikitty |
Actuellement les champs de type Wikitty accepte n'importe qu'elle wikitty (quelque soit ses extension). Il sera bien de pouvoir restraindre les wikitties assignable via une contrainte contenu dans un tag/value.
exemple:
Wikitty company wikitty-extension=Company
Wikitty meuble wikitty-extension=Table,Chaise,Bureau
wikitty-extension peut-etre une liste d'extension, dans ce cas cela veut dire que l'objet doit avoir une des extension, et non pas toutes les extensions. Si un Wikitty contient un champs avec le tag/value wikitty-extension, lors du store un check sera fait sur l'objet assigné pour vérifier qu'il a bien une des extensions requises.
Lors de la génération des entities métier penser a ajouter ce tag/value. |
Résolu |
bpoussin |
Evolution |
Normal |
3.5 |
API |
- |
Wikitty pre-loading field |
Il serait agreable de pouvoir faire un pre-loading de certain champs Wikitty.
client.restore(id, "Company.employee")
client.restore(id, "Company.employee,Employee.person;Company.address")
Dans le 1er cas, on preload seulement le un champs de l'objet qui va etre chargé.
Dans le 2eme cas on preload 2 champs Company.employee et Company.address. Puis pour employee on re-preload Employee.person.
Pour cela ajouter sur le WikittyImpl une map qui permette de stocker les wikitty preloader.
on ajoute la méthode sur le Wikitty:
getAsWikitty(String extName, String fieldName, boolean exceptionIfNotLoader):Wikitty
lors d'un set(...) si la value est un Wikitty alors on le met dans la map des objets preloaded
on ajoute la méthode sur les objets metiers:
get(boolean exceptionIfNotLoader): ObjectMetier
Si le boolean est false, alors au lieu d'une exception, on retourne null si l'objet est pas preloader. |
Résolu |
bpoussin |
Evolution |
Normal |
3.5 |
API |
- |
Add support of limit and offset in query parser |
Actuellement on peut faire des requetes, mais seulement definir les conditions. Il serait pratique de pouvoir aussi definir la limite de recherche et l'offset de debut directement dans la chaine a parser.
exemple:
ext.field=toto offset=10 limit=10 |
Résolu |
bpoussin |
Evolution |
Normal |
3.5 |
API |
- |
In parser support ' as string delimiter and not only " |
Pour plus facilement ecrire des requetes dans des chaines de caractere java, il sera plus pratique que les chaines dans le parser puissent aussi etre delimitee par ' en plus de ".
Donc:
ext.field="Bonjour le monde"
pourrait aussi s'ecrire:
ext.field='Bonjour le monde' |
Résolu |
bpoussin |
Evolution |
Normal |
3.5 |
API |
- |
Update to h2 1.3.164 |
|
Résolu |
echatellier |
Evolution |
Normal |
3.5 |
API |
- |
JdbcSQLException during sync engin |
With calling method "syncEngine()", calling method @WikittyStorageJDBC.getDataStatistic()@
throw following exception:
org.h2.jdbc.JdbcSQLException: No data is available [2000-127]
at org.h2.message.Message.getSQLException(Message.java:110)
at org.h2.message.Message.getSQLException(Message.java:121)
at org.h2.message.Message.getSQLException(Message.java:74)
at org.h2.message.Message.getSQLException(Message.java:156)
at org.h2.jdbc.JdbcResultSet.checkOnValidRow(JdbcResultSet.java:3016)
at org.h2.jdbc.JdbcResultSet.get(JdbcResultSet.java:3022)
at org.h2.jdbc.JdbcResultSet.getLong(JdbcResultSet.java:601)
at org.apache.commons.dbcp.DelegatingResultSet.getLong(DelegatingResultSet.java:228)
at org.apache.commons.dbcp.DelegatingResultSet.getLong(DelegatingResultSet.java:228)
at org.nuiton.wikitty.jdbc.WikittyStorageJDBC.getDataStatistic(WikittyStorageJDBC.java:632)
at org.nuiton.wikitty.services.WikittyServiceStorage.syncSearchEngine(WikittyServiceStorage.java:1204)
|
Résolu |
echatellier |
Anomalie |
Normal |
3.5 |
API |
- |
Update to postgresql 9.1-901-1.jdbc4 |
|
Résolu |
echatellier |
Tâche |
Normal |
3.5 |
API |
- |
Wildcard search test fails with query marker and parser |
Following test fails using wildcard :
3.11 3.13 develop index.html index.html~ latest versions testQueryMarkerWilcardEquals()
3.11 3.13 develop index.html index.html~ latest versions testQueryParserWilcardEquals() |
Résolu |
bpoussin |
Anomalie |
Normal |
3.5 |
SolR |
- |
All not* condition have different behaviour with in memory service |
Following condition doesn't return same result count with in memory or solr search engine:
3.11 3.13 develop index.html index.html~ latest versions ne()
3.11 3.13 develop index.html index.html~ latest versions unlike()
3.11 3.13 develop index.html index.html~ latest versions notsw()
3.11 3.13 develop index.html index.html~ latest versions notew() |
Résolu |
bpoussin |
Anomalie |
Normal |
3.5 |
API |
- |
Add pattern tagValue on wikitties |
Force the field to verify a pattern. |
Résolu |
bpoussin |
Evolution |
Normal |
3.5 |
API |
- |
Add indexed tagValue on wikitty |
indexed (boolean, default true) : If false, the field is not indexed. |
Résolu |
bpoussin |
Evolution |
Normal |
3.5 |
API |
- |
Add Crypt tagvalue on wikitties |
crypt : Crypt the data when storing into database (not indexed). |
Résolu |
bpoussin |
Evolution |
Normal |
3.5 |
API |
- |
Update to commons-pool 1.6 |
|
Résolu |
echatellier |
Tâche |
Normal |
3.5 |
API |
- |
Update to slf4j 1.6.4 |
|
Résolu |
echatellier |
Tâche |
Normal |
3.5 |
API |
- |
findByXXX with entity class in argument don't add filter condition on extension of this entity |
Il y a une erreur dans le code un isAssignableFrom qui est inversé et donc toujours faux :( |
Résolu |
bpoussin |
Anomalie |
Haut |
3.5 |
API |
- |
If entity use two extension with same field name, *.fieldname faild |
Lorsqu'on genere les #all. et #ft.all. il faut prendre en compte qu'il peut y avoir dans la meme entite plusieurs fois le meme champs et donc ne pas ecraser les valeurs precedentes. Ce qui n'est pas le cas actuellement |
Résolu |
bpoussin |
Anomalie |
Normal |
3.5 |
SolR |
- |
toString tagValue must support preload wikitty access |
Maintenant que les wikitties peuvent avoir des champs wikitty precharge, il sera interessant de pouvoir ecrire des expressions plus complexe pour le toString. Et que par defaut pour un champs de type Wikitty, il essaie de recuperer l'objet et non l'id.
exemple:
toString="Ma societe: %Employee.company,Company.name|societe non chargée$s" |
Résolu |
bpoussin |
Evolution |
Normal |
3.5 |
API |
- |
Enhance in memory implementation |
Petite correction (tri des facette) et amélioration de l'implantation in memory (meme retour que solr sur les != et unlike) |
Résolu |
bpoussin |
Evolution |
Normal |
3.5 |
API |
- |
Search with *.fieldname faild if this entity is in WikittyTreeNode |
Si on met un objet dans un TreeNode, les données de l'objet sont relu depuis solr, pour etre reindexe. Mais certain champs qui devrait etre stored="true" ne le sont pas. Des infos sont donc perdu lorsqu'on met une entite dans un TreeNode. |
Résolu |
bpoussin |
Anomalie |
Haut |
3.5 |
SolR |
- |
add new constraints tag value on field (min, max, allow) |
De nouveau type de contraintes seraient utiles:
- min, minQuery pour indiquer que le champs ne peut pas etre inferieur a une valeur qui peut provenir de la base
- max, maxQuery pour indiquer que le champs ne peut pas etre superieur a une valeur qui peut provenir de la base
- allowed, allowedQuery pour indiquer qu'un champs de type wikitty doit prendre sa valeur dans une liste d'id possible (allowedQuery) ou que la valeur doit avoir certain extension (allowed) |
Résolu |
bpoussin |
Evolution |
Normal |
3.5 |
API |
- |
Update to smackx 3.2.1 |
|
Résolu |
echatellier |
Tâche |
Normal |
3.5 |
API |
- |
Update to jbossjta 4.16.2.Final |
|
Résolu |
echatellier |
Tâche |
Normal |
3.5 |
API |
- |
Field *.fieldname must be sortable |
Actuellement les champs *.fieldname (#all. et #ft.all.) ne sont pas triable. Il serait bon de pouvoir les utiliser comme champs triable meme si certaine fois cela n'a pas de sens. |
Résolu |
bpoussin |
Evolution |
Normal |
3.5 |
SolR |
- |
ElementField in generated entities not usable on GWT |
We must either clean the ElementField source code so that it is usable on GWT or clean generated entities so that there is no reference to ElementField.
Problems for GWT in ElementField :
Line 45: Element
Line 48: Log
Line 48: LogFactory
Line 71: WikittyUtil
Line 81: FieldType.TYPE |
Résolu |
bpoussin |
Anomalie |
Normal |
3.4 |
API |
- |
Update to solr and lucene 3.5 |
|
Résolu |
echatellier |
Evolution |
Normal |
3.4 |
- |
- |
serialVersionUID changes at each generation |
serialVersionUID are not safe when deploying and using snapshot that use those id for serialisation.
For example, using cajo:
Caused by: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.io.InvalidClassException: org.chorem.vradi.entities.FormImpl; local class incompatible: stream classdesc serialVersionUID = 8512268570430849981, local class serialVersionUID = -2402275119093430223
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:334)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
at gnu.cajo.invoke.Remote_Stub.invoke(Unknown Source)
at gnu.cajo.invoke.Remote.invoke(Unknown Source)
at gnu.cajo.utils.extra.TransparentItemProxy.invoke(Unknown Source)
|
Résolu |
echatellier |
Anomalie |
Normal |
3.4 |
Generation |
- |