branch chorem-ng updated (9ebf1ca -> 03563f0)
This is an automated email from the git hooks/post-receive script. New change to branch chorem-ng in repository chorem. See http://git.chorem.org/chorem.git from 9ebf1ca Use real saints data for home page new a04f4b2 prepare services new version adds c548f7f add GSON Adapter for Wikitty BusinessEntity adds 7a81dca add GSON Adapter for Wikitty BusinessEntity adds 0d78c0c Merge branch 'jsonize_wikitty' of https://git.chorem.org/chorem into jsonize_wikitty adds 3f01d6a complete Adapter for Wikitty BusinessEntity new 0e28775 Merge branch 'jsonize_wikitty' into chorem-ng new 03563f0 add 'Simple' Json converter for wikitty and add JsonRender as Default The 3 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 03563f001a7ad4ef383c78fc03d1f3c1b6f2ead0 Author: Yannick Martel <yannick.martel@gmail.com> Date: Thu Apr 2 19:59:19 2015 +0200 add 'Simple' Json converter for wikitty and add JsonRender as Default commit 0e287759c0e44d0d29ffc777b48bacb325ac20b3 Merge: a04f4b2 3f01d6a Author: Yannick Martel <yannick.martel@gmail.com> Date: Thu Apr 2 18:31:51 2015 +0200 Merge branch 'jsonize_wikitty' into chorem-ng commit a04f4b2c4934ea0f84a377f5e0ae18047b81e11f Author: Yannick Martel <yannick.martel@gmail.com> Date: Thu Apr 2 18:31:36 2015 +0200 prepare services new version Summary of changes: chorem-ui-angular/pom.xml | 9 + .../webmotion/actions/WikittyRestAction.java | 31 +- .../webmotion/converters/JsonArrayConverter.java | 55 +++ .../chorem/webmotion/converters/JsonConverter.java | 4 +- .../chorem/webmotion/converters/JsonHelper.java | 145 ++++++++ .../webmotion/injector/InjectorListener.java | 10 +- .../org/chorem/webmotion/render/JsonRender.java | 40 +++ chorem-webmotion/src/main/resources/mapping | 389 ++++++++++----------- .../webmotion/converters/JsonConverterTest.java | 76 ++++ 9 files changed, 548 insertions(+), 211 deletions(-) create mode 100644 chorem-webmotion/src/main/java/org/chorem/webmotion/converters/JsonArrayConverter.java create mode 100644 chorem-webmotion/src/main/java/org/chorem/webmotion/render/JsonRender.java -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch chorem-ng in repository chorem. See http://git.chorem.org/chorem.git commit a04f4b2c4934ea0f84a377f5e0ae18047b81e11f Author: Yannick Martel <yannick.martel@gmail.com> Date: Thu Apr 2 18:31:36 2015 +0200 prepare services new version --- chorem-ui-angular/pom.xml | 9 + .../webmotion/actions/WikittyRestAction.java | 21 +- chorem-webmotion/src/main/resources/mapping | 386 ++++++++++----------- 3 files changed, 214 insertions(+), 202 deletions(-) diff --git a/chorem-ui-angular/pom.xml b/chorem-ui-angular/pom.xml index 0699900..2a5fd5b 100644 --- a/chorem-ui-angular/pom.xml +++ b/chorem-ui-angular/pom.xml @@ -35,6 +35,15 @@ http://maven.apache.org/xsd/maven-4.0.0.xsd"> <dependencies> <dependency> + <groupId>org.chorem.chorem</groupId> + <artifactId>chorem-webmotion</artifactId> + <version>${project.version}</version> + <type>war</type> + <scope>runtime</scope> + </dependency> + + + <dependency> <groupId>org.webjars</groupId> <artifactId>angularjs</artifactId> <version>${angularVersion}</version> diff --git a/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/WikittyRestAction.java b/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/WikittyRestAction.java index e6b72e4..de9cb71 100644 --- a/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/WikittyRestAction.java +++ b/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/WikittyRestAction.java @@ -34,11 +34,14 @@ import org.chorem.ChoremClient; import org.chorem.webmotion.render.RenderWikitty; import org.debux.webmotion.server.WebMotionController; import org.debux.webmotion.server.render.Render; +import org.nuiton.wikitty.entities.BusinessEntity; import org.nuiton.wikitty.entities.Element; import org.nuiton.wikitty.entities.FieldType; import org.nuiton.wikitty.entities.Wikitty; import org.nuiton.wikitty.entities.WikittyExtension; +import org.nuiton.wikitty.entities.WikittyImpl; import org.nuiton.wikitty.query.WikittyQuery; +import org.nuiton.wikitty.query.WikittyQueryMaker; import org.nuiton.wikitty.query.WikittyQueryParser; import org.nuiton.wikitty.query.WikittyQueryResult; import org.nuiton.wikitty.query.conditions.Condition; @@ -56,13 +59,29 @@ public class WikittyRestAction extends WebMotionController { /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(WikittyRestAction.class); + /** Retrieve all wikitties corresponding to a given extension name : kind of + * by-pass directly for business needs, universal business getter + * + * @param extension : name of the extension + * @return + */ + public List<Wikitty> getWikitties(ChoremClient client, String extension) { + + WikittyQuery query = new WikittyQueryMaker().where().exteq(extension).getQuery(); + + WikittyQueryResult<Wikitty> queryResult = client.findAllByQuery(Wikitty.class, query); + List<Wikitty> result = queryResult.getAll(); + + return result; + } + public Render getWikittiesFromQuery(ChoremClient client, String query) { WikittyQuery q = WikittyQueryParser.parse(query); WikittyQueryResult<Wikitty> qResult = client.findAllByQuery(Wikitty.class, q); return new RenderWikitty().setModelWikitty(qResult.getAll()); } - public Render getWikitties(ChoremClient client, List<String> id) { + public Render getWikittiesById(ChoremClient client, List<String> id) { List<Wikitty> result = client.restore(id); return new RenderWikitty().setModelWikitty(result); } diff --git a/chorem-webmotion/src/main/resources/mapping b/chorem-webmotion/src/main/resources/mapping index e1bf470..7335f42 100644 --- a/chorem-webmotion/src/main/resources/mapping +++ b/chorem-webmotion/src/main/resources/mapping @@ -7,207 +7,191 @@ default.render=org.debux.webmotion.server.render.DefaultRender [filters] * /* ChoremClientFilter.inject -#GET /wikitty/{extension}/view/* DecoratorFilter.decorate slotEntityFooter={extension}Footer.jsp -* /wikitty-json/* DecoratorFilter.decorate wmDecoratorNo=true -* /fragment/* DecoratorFilter.decorate wmDecoratorNo=true -* /sales/funnel/json/* DecoratorFilter.decorate wmDecoratorNo=true -* /sales/funnel/partial/* DecoratorFilter.decorate wmDecoratorNo=true -* /crm/export DecoratorFilter.decorate wmDecoratorNo=true -* /project/editProject.html DecoratorFilter.decorate wmDecoratorNo=true -* /financial/expenseAccounts/expenseAccountEntryEdit.html DecoratorFilter.decorate wmDecoratorNo=true -* /hr/employeeEdit/json/* DecoratorFilter.decorate wmDecoratorNo=true -* /ascii/* DecoratorFilter.decorate wmDecoratorNo=true -* /rest/* DecoratorFilter.decorate wmDecoratorNo=true -GET /* DecoratorFilter.decorate -* /* AuthenticationFilter.check -##### -#/!\# -##### il y a un bug si on met le DecoratorFilter en POST avec les formulaires -##### enctype="multipart/form-data", il faut donc que tous les form post -##### fasse un redirect en GET apres leur action, sinon on a pas de decorateur -##### le symptome de l'erreur est qu'il n'y a aucun parametre qui nous arrive :( -[actions] -* /logout action:GenericAction.logout -* / view:index.jsp -* /wikitty/{extension}/search action:GenericAction.search -* /wikitty/{extension}/view/{id} action:GenericAction.view -* /wikitty/{extension}/edit/{id} action:GenericAction.edit -* /wikitty/{extension}/editMulti/{ids} action:GenericAction.editMulti -* /wikitty/{extension}/delete/{id} action:GenericAction.delete -* /wikitty/search action:GenericAction.search -* /wikitty/searchRelated?id={query} action:GenericAction.search -* /wikitty/view/{id} action:GenericAction.view -* /wikitty/edit/{id} action:GenericAction.edit -* /wikitty/copy/{id} action:GenericAction.edit copy=true -* /wikitty/editMulti/{ids} action:GenericAction.editMulti -* /wikitty/delete/{id} action:GenericAction.delete -* /wikitty/save action:GenericAction.save -* /wikitty/saveMulti action:GenericAction.saveMulti -* /wikitty/upgrade action:project.QuotationStatusAction.upgrade -* /wikitty/view/{id}/{extension}/{field} action:GenericAction.download wmDecoratorNo=true -* /wikitty-json/searchField?q={query} action:GenericAction.searchFieldJson -* /wikitty-json/search?q={query} action:GenericAction.searchJson -* /wikitty-json/search?term={query} action:GenericAction.searchJson -* /wikitty-json/get/{id} action:GenericAction.getById -* /wikitty-json/save action:GenericAction.saveJson -* /fragment/dashboard/{method} action:DashboardAction.{method} useDate=true -* /fragment/dashboardHR/{method} action:DashboardHRAction.{method} -* /fragment/sales/{method} action:sales.SalesAction.{method} -* /admin view:contact.jsp -* /admin/importExport view:admin/importExport.jsp -* /admin/{method} action:AdminAction.{method} -* /contact view:contact.jsp -* /report view:report.jsp -* /ascii/budget action:DashboardAction.budget type=ascii,report=budget -* /bi/{method} action:BIAction.{method} -* /hr view:hr.jsp -* /hr/vacationRequest/edit/{id} action:HrAction.editVacationRequest -* /hr/vacationDiv/{ids} action:HrAction.editVacationDiv -* /hr/vacationRequest/save action:HrAction.saveVacationRequest -* /hr/vacationRequest/delete/{id} action:HrAction.deleteVacationRequest -* /hr/employeeEdit action:EmployeeEditAction.requestEmployeeEdit -* /hr/dashboardAdc action:AdcDashboardAction.requestDashboardAdc -* /hr/employeeEdit/json/{method}/{employeeId} action:EmployeeEditAction.{method} -* /salesMenu view:salesReports/menu.jsp -* /sales/report/sentQuotation action:sales.SentQuotationsReportAction.sentQuotationPerMonth -* /sales/report/acceptedQuotation action:sales.AcceptedQuotationsReportAction.acceptedQuotationPerMonth -* /sales/report/sales action:sales.SalesReportAction.sales -* /sales/report/salesPerProject action:sales.SalesPerProjectReportAction.sales -* /sales/report/salesPerProject/{project} action:sales.ProjectSalesReportAction.sales -* /sales/report/salesPerAccount action:sales.SalesPerAccountReportAction.sales -* /sales/report/salesPerAccount/{account} action:sales.AccountSalesReportAction.sales -* /sales/funnel action:sales.FunnelAction.funnel -* /sales/funnel/partial/dialog-leadToDraft.html view:salesReports/dialog-leadToDraft.html -* /sales/funnel/partial/dialog-draftToSent.html view:salesReports/dialog-draftToSent.html -* /sales/funnel/partial/dialog-sentToAccepted.html view:salesReports/dialog-sentToAccepted.html -* /sales/funnel/partial/dialog-sentToRejected.html view:salesReports/dialog-sentToRejected.html -* /sales/funnel/partial/dialog-cancel.html view:salesReports/dialog-cancel.html -* /sales/funnel/json/{method} action:sales.SalesAction.{method} -* /sales/funnel/json/{method}/{id} action:sales.SalesAction.{method} -* /project action:project.DashboardProjectAction.requestProject -* /project/multi action:project.DashboardProjectAction.requestMultiProject -* /project/json/getExtension/{extensionName}/{id} action:project.QuotationStatusAction.getExtension -* /project/json/getGanttInfo/{id} action:project.GanttAction.getGanttInfo -* /project/employee action:project.DashboardProjectAction.requestEmployee -* /crm/account/{id} action:crm.AccountAction.view -* /crm/quotation/edit/{id} action:crm.QuotationAction.edit -* /crm/export action:crm.ExportAction.exportContactBase - -GET /rest/project/projects?page={page}&count={count} action:project.ProjectsAction.findAllProjects page=1,count=10 -GET /project/projects view:projects/projects.jsp -GET /project/editProject.html view:projects/editProject.html -PUT /projects/{projectId}/ action:project.ProjectsAction.updateProject - -#### Expense Accounts #### -GET /rest/financial/expenseAccounts?page={page}&count={count} action:financial.ExpenseAccountAction.findAllExpenseAccounts page=1,count=20 -GET /rest/financial/expenseAccounts/{expenseAccountId} action:financial.ExpenseAccountAction.findExpenseAccount -GET /financial/expenseAccounts view:financial/expenseAccounts.jsp -GET /financial/expenseAccounts/expenseAccountEntryEdit.html view:financial/expenseAccountEntryEdit.html -GET /financial/expenseAccounts/{expenseAccountId} action:financial.ExpenseAccountAction.findExpenseAccount -PUT /financial/expenseAccounts/{expenseAccountId} action:financial.ExpenseAccountAction.saveExpenseAccount -* /financial/report/billing action:financial.BillingReportAction.billing -* /financial/report/billingPerProject action:financial.BillingPerProjectReportAction.billing -* /financial/report/billingPerProject/{project} action:financial.ProjectBillingReportAction.billing -* /financial/report/billingPerAccount action:financial.BillingPerAccountReportAction.billing -* /financial/report/billingPerAccount/{account} action:financial.AccountBillingReportAction.billing -* /billingMenu view:financial/reports/menu.jsp +[actions] +GET /services/v1/{extension} action:WikittyRestAction.getWikitties -# -# Wikitty Rest API -# -# GET -# -# retourne une liste de wikitty en json ou en csv suivant la demande dans le header -GET /rest/wikitty?q={query} action:WikittyRestAction.getWikittiesFromQuery -# -# retourne un ou plusieurs wikitty (si plusieurs fois le param id), et les retourne en json ou csv suivnatle header -GET /rest/wikitty?id={} action:WikittyRestAction.getWikitties -# -# retourne un wikitty en json -GET /rest/wikitty/{id} action:WikittyRestAction.getWikitty -# -# retourne la valeur d'une extension d'un wikitty en json -GET /rest/wikitty/{id}/{ext} action:WikittyRestAction.getWikittyFieldValue -# -# retourne la valeur d'un champs en json (pour les lists) -GET /rest/wikitty/{id}/{ext}/{field} action:WikittyRestAction.getWikittyFieldValue -# -# retourne une liste d'extensions en json, on peut avoir plusieurs fois le parametre idOrName -GET /rest/extension?idOrName={} action:WikittyRestAction.getExtensions -# -# retourne une liste d'extensions en json -GET /rest/extension action:WikittyRestAction.getExtensions -# -# retourne une extension en json -GET /rest/extension/{idOrName} action:WikittyRestAction.getExtension -# -# retourne la description d'un champs en json -GET /rest/extension/{idOrName}/{field} action:WikittyRestAction.getExtensionField -# -# retourne le resultat d'une query qui contient un select. Le resultat est en json ou csv suivant le header -GET /rest/select?q={query} action:WikittyRestAction.select -# -# retourne le resultat d'une query contenant des facets. Le resultat est en json ou csv suivant le header -# il peut y avoir des parametres: fq (facetQuery) ou ff (facetField) -GET /rest/facet?q={query} action:WikittyRestAction.facet -# -# POST pour la creation -# -# cree un nouveau ou des nouveaux wikitty (si plusieurs fois le champs json). Retourne en json les objets crees -POST /rest/wikitty?json={} action:WikittyRestAction.createWikittiesFromJson -# -# cree un nouveau ou des nouveaux wikitty. Les parametres fournissent les -# informations des champs. S'il y a plusieurs parametre 'id', alors les champs -# doivent etre prefixe par l'id de l'objet a qui ils appartiennent (c'est id, -# ne sont que des pseudos id remplacer par des vrais apres la sauvegarde). -# retourne en json les objets creer -POST /rest/wikitty action:WikittyRestAction.createWikitties -# -# cree une ou des extensions, les extensions sont sous forme de json -POST /rest/extension?json={} action:WikittyRestAction.updateExtension -# -# cree une nouvelle extension (ou version d'extension). Retourne en json, les extensions creees -POST /rest/extension action:WikittyRestAction.createExtensions -# -# PUT pour l'update -# -# modifie un ou des wikitty (si plusieurs fois le champs json). Retourne en json les objets modifies -PUT /rest/wikitty?json={} action:WikittyRestAction.updateWikittyFromJson -# -# import le fichier CSV joint a la requete. Retourne en json les objets importes -PUT /rest/wikitty?csv={} action:WikittyRestAction.updateWikittyFromJson -# -# modifie un ou des wikitty. Les parametres fournissent les informations des champs. -# S'il y a plusieurs parametre 'id', alors les champs doivent etre prefixe par -# l'id de l'objet a qui ils appartiennent. retourne en json les objets modifies -PUT /rest/wikitty action:WikittyRestAction.updateWikitty -# -# modifie un wikitty, les parametres fournissent les informations des champs -PUT /rest/wikitty/{id} action:WikittyRestAction.updateWikitty -# -# modifie un champs d'un wikitty, la valeur du champs est dans le parametre value -PUT /rest/wikitty/{id}/{fqfield}?value={} action:WikittyRestAction.updateWikittyField -# -# rem: les extensions ne sont pas modifiable -# DELETE -# -# supprime les wikitty retourne par la query, et les retourne en json -DELETE /rest/wikitty?q={query} action:WikittyRestAction.deleteWikittiesFromQuery -# -# supprime un ou plusieurs wikitty (si plusieurs fois le param id), et les retourne en json -DELETE /rest/wikitty?id={} action:WikittyRestAction.deleteWikitties -# -# supprime un wikitty et le retourne en json -DELETE /rest/wikitty/{id} action:WikittyRestAction.deleteWikitty -# -# supprime une extension d'un wikitty (rem on supporte '*' comme id ?) -DELETE /rest/wikitty/{id}/{ext} action:WikittyRestAction.deleteWikittyExtOrField -# -# vide un champs d'un wikitty (rem on supporte '*' comme id ou field ?) -DELETE /rest/wikitty/{id}/{ext}/{field} action:WikittyRestAction.deleteWikittyExtOrField -# -# supprime une extension (name) ou une version d'une extension (id), si un objet -# a encore cette extension la demande echoue. Les extensions supprimees sont retournees en json -DELETE /rest/extension/{nameOrId} action:WikittyRestAction.deleteExtension +#* /logout action:Ge#nericAction.logout +#* /wikitty/{extension}/search action:Ge#nericAction.search +#* /wikitty/{extension}/search action:Ge#nericAction.search +#* /wikitty/{extension}/view/{id} action:Ge#nericAction.view +#* /wikitty/{extension}/edit/{id} action:GenericAction.edit +#* /wikitty/{extension}/editMulti/{ids} action:GenericAction.editMulti +#* /wikitty/{extension}/delete/{id} action:GenericAction.delete +#* /wikitty/search action:GenericAction.search +#* /wikitty/searchRelated?id={query} action:GenericAction.search +#* /wikitty/view/{id} action:GenericAction.view +#* /wikitty/edit/{id} action:GenericAction.edit +#* /wikitty/copy/{id} action:GenericAction.edit copy=true +#* /wikitty/editMulti/{ids} action:GenericAction.editMulti +#* /wikitty/delete/{id} action:GenericAction.delete +#* /wikitty/save action:GenericAction.save +#* /wikitty/saveMulti action:GenericAction.saveMulti +#* /wikitty/upgrade action:project.QuotationStatusAction.upgrade +#* /wikitty/view/{id}/{extension}/{field} action:GenericAction.download wmDecoratorNo=true +#* /wikitty-json/searchField?q={query} action:GenericAction.searchFieldJson +#* /wikitty-json/search?q={query} action:GenericAction.searchJson +#* /wikitty-json/search?term={query} action:GenericAction.searchJson +#* /wikitty-json/get/{id} action:GenericAction.getById +#* /wikitty-json/save action:GenericAction.saveJson +#* /fragment/dashboard/{method} action:DashboardAction.{method} useDate=true +#* /fragment/dashboardHR/{method} action:DashboardHRAction.{method} +#* /fragment/sales/{method} action:sales.SalesAction.{method} +#* /admin view:contact.jsp +#* /admin/importExport view:admin/importExport.jsp +#* /admin/{method} action:AdminAction.{method} +#* /contact view:contact.jsp +#* /report view:report.jsp +#* /ascii/budget action:DashboardAction.budget type=ascii,report=budget +#* /bi/{method} action:BIAction.{method} +#* /hr view:hr.jsp +#* /hr/vacationRequest/edit/{id} action:HrAction.editVacationRequest +#* /hr/vacationDiv/{ids} action:HrAction.editVacationDiv +#* /hr/vacationRequest/save action:HrAction.saveVacationRequest +#* /hr/vacationRequest/delete/{id} action:HrAction.deleteVacationRequest +#* /hr/employeeEdit action:EmployeeEditAction.requestEmployeeEdit +#* /hr/dashboardAdc action:AdcDashboardAction.requestDashboardAdc +#* /hr/employeeEdit/json/{method}/{employeeId} action:EmployeeEditAction.{method} +#* /salesMenu view:salesReports/menu.jsp +#* /sales/report/sentQuotation action:sales.SentQuotationsReportAction.sentQuotationPerMonth +#* /sales/report/acceptedQuotation action:sales.AcceptedQuotationsReportAction.acceptedQuotationPerMonth +#* /sales/report/sales action:sales.SalesReportAction.sales +#* /sales/report/salesPerProject action:sales.SalesPerProjectReportAction.sales +#* /sales/report/salesPerProject/{project} action:sales.ProjectSalesReportAction.sales +#* /sales/report/salesPerAccount action:sales.SalesPerAccountReportAction.sales +#* /sales/report/salesPerAccount/{account} action:sales.AccountSalesReportAction.sales +#* /sales/funnel action:sales.FunnelAction.funnel +#* /sales/funnel/partial/dialog-leadToDraft.html view:salesReports/dialog-leadToDraft.html +#* /sales/funnel/partial/dialog-draftToSent.html view:salesReports/dialog-draftToSent.html +#* /sales/funnel/partial/dialog-sentToAccepted.html view:salesReports/dialog-sentToAccepted.html +#* /sales/funnel/partial/dialog-sentToRejected.html view:salesReports/dialog-sentToRejected.html +#* /sales/funnel/partial/dialog-cancel.html view:salesReports/dialog-cancel.html +#* /sales/funnel/json/{method} action:sales.SalesAction.{method} +#* /sales/funnel/json/{method}/{id} action:sales.SalesAction.{method} +#* /project action:project.DashboardProjectAction.requestProject +#* /project/multi action:project.DashboardProjectAction.requestMultiProject +#* /project/json/getExtension/{extensionName}/{id} action:project.QuotationStatusAction.getExtension +#* /project/json/getGanttInfo/{id} action:project.GanttAction.getGanttInfo +#* /project/employee action:project.DashboardProjectAction.requestEmployee +#* /crm/account/{id} action:crm.AccountAction.view +#* /crm/quotation/edit/{id} action:crm.QuotationAction.edit +#* /crm/export action:crm.ExportAction.exportContactBase +# +#GET /rest/project/projects?page={page}&count={count} action:project.ProjectsAction.findAllProjects page=1,count=10 +#GET /project/projects view:projects/projects.jsp +#GET /project/editProject.html view:projects/editProject.html +#PUT /projects/{projectId}/ action:project.ProjectsAction.updateProject +# +##### Expense Accounts #### +#GET /rest/financial/expenseAccounts?page={page}&count={count} action:financial.ExpenseAccountAction.findAllExpenseAccounts page=1,count=20 +#GET /rest/financial/expenseAccounts/{expenseAccountId} action:financial.ExpenseAccountAction.findExpenseAccount +#GET /financial/expenseAccounts view:financial/expenseAccounts.jsp +#GET /financial/expenseAccounts/expenseAccountEntryEdit.html view:financial/expenseAccountEntryEdit.html +#GET /financial/expenseAccounts/{expenseAccountId} action:financial.ExpenseAccountAction.findExpenseAccount +#PUT /financial/expenseAccounts/{expenseAccountId} action:financial.ExpenseAccountAction.saveExpenseAccount +#* /financial/report/billing action:financial.BillingReportAction.billing +#* /financial/report/billingPerProject action:financial.BillingPerProjectReportAction.billing +#* /financial/report/billingPerProject/{project} action:financial.ProjectBillingReportAction.billing +#* /financial/report/billingPerAccount action:financial.BillingPerAccountReportAction.billing +#* /financial/report/billingPerAccount/{account} action:financial.AccountBillingReportAction.billing +#* /billingMenu view:financial/reports/menu.jsp +# +# +## +## Wikitty Rest API +## +## GET +## +## retourne une liste de wikitty en json ou en csv suivant la demande dans le header +#GET /rest/wikitty?q={query} action:WikittyRestAction.getWikittiesFromQuery +## +## retourne un ou plusieurs wikitty (si plusieurs fois le param id), et les retourne en json ou csv suivnatle header +#GET /rest/wikitty?id={} action:WikittyRestAction.getWikitties +## +## retourne un wikitty en json +#GET /rest/wikitty/{id} action:WikittyRestAction.getWikitty +## +## retourne la valeur d'une extension d'un wikitty en json +#GET /rest/wikitty/{id}/{ext} action:WikittyRestAction.getWikittyFieldValue +## +## retourne la valeur d'un champs en json (pour les lists) +#GET /rest/wikitty/{id}/{ext}/{field} action:WikittyRestAction.getWikittyFieldValue +## +## retourne une liste d'extensions en json, on peut avoir plusieurs fois le parametre idOrName +#GET /rest/extension?idOrName={} action:WikittyRestAction.getExtensions +## +## retourne une liste d'extensions en json +#GET /rest/extension action:WikittyRestAction.getExtensions +## +## retourne une extension en json +#GET /rest/extension/{idOrName} action:WikittyRestAction.getExtension +## +## retourne la description d'un champs en json +#GET /rest/extension/{idOrName}/{field} action:WikittyRestAction.getExtensionField +## +## retourne le resultat d'une query qui contient un select. Le resultat est en json ou csv suivant le header +#GET /rest/select?q={query} action:WikittyRestAction.select +## +## retourne le resultat d'une query contenant des facets. Le resultat est en json ou csv suivant le header +## il peut y avoir des parametres: fq (facetQuery) ou ff (facetField) +#GET /rest/facet?q={query} action:WikittyRestAction.facet +## +## POST pour la creation +## +## cree un nouveau ou des nouveaux wikitty (si plusieurs fois le champs json). Retourne en json les objets crees +#POST /rest/wikitty?json={} action:WikittyRestAction.createWikittiesFromJson +## +## cree un nouveau ou des nouveaux wikitty. Les parametres fournissent les +## informations des champs. S'il y a plusieurs parametre 'id', alors les champs +## doivent etre prefixe par l'id de l'objet a qui ils appartiennent (c'est id, +## ne sont que des pseudos id remplacer par des vrais apres la sauvegarde). +## retourne en json les objets creer +#POST /rest/wikitty action:WikittyRestAction.createWikitties +## +## cree une ou des extensions, les extensions sont sous forme de json +#POST /rest/extension?json={} action:WikittyRestAction.updateExtension +## +## cree une nouvelle extension (ou version d'extension). Retourne en json, les extensions creees +#POST /rest/extension action:WikittyRestAction.createExtensions +## +## PUT pour l'update +## +## modifie un ou des wikitty (si plusieurs fois le champs json). Retourne en json les objets modifies +#PUT /rest/wikitty?json={} action:WikittyRestAction.updateWikittyFromJson +## +## import le fichier CSV joint a la requete. Retourne en json les objets importes +#PUT /rest/wikitty?csv={} action:WikittyRestAction.updateWikittyFromJson +## +## modifie un ou des wikitty. Les parametres fournissent les informations des champs. +## S'il y a plusieurs parametre 'id', alors les champs doivent etre prefixe par +## l'id de l'objet a qui ils appartiennent. retourne en json les objets modifies +#PUT /rest/wikitty action:WikittyRestAction.updateWikitty +## +## modifie un wikitty, les parametres fournissent les informations des champs +#PUT /rest/wikitty/{id} action:WikittyRestAction.updateWikitty +## +## modifie un champs d'un wikitty, la valeur du champs est dans le parametre value +#PUT /rest/wikitty/{id}/{fqfield}?value={} action:WikittyRestAction.updateWikittyField +## +## rem: les extensions ne sont pas modifiable +## DELETE +## +## supprime les wikitty retourne par la query, et les retourne en json +#DELETE /rest/wikitty?q={query} action:WikittyRestAction.deleteWikittiesFromQuery +## +## supprime un ou plusieurs wikitty (si plusieurs fois le param id), et les retourne en json +#DELETE /rest/wikitty?id={} action:WikittyRestAction.deleteWikitties +## +## supprime un wikitty et le retourne en json +#DELETE /rest/wikitty/{id} action:WikittyRestAction.deleteWikitty +## +## supprime une extension d'un wikitty (rem on supporte '*' comme id ?) +#DELETE /rest/wikitty/{id}/{ext} action:WikittyRestAction.deleteWikittyExtOrField +## +## vide un champs d'un wikitty (rem on supporte '*' comme id ou field ?) +#DELETE /rest/wikitty/{id}/{ext}/{field} action:WikittyRestAction.deleteWikittyExtOrField +## +## supprime une extension (name) ou une version d'une extension (id), si un objet +## a encore cette extension la demande echoue. Les extensions supprimees sont retournees en json +#DELETE /rest/extension/{nameOrId} action:WikittyRestAction.deleteExtension -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch chorem-ng in repository chorem. See http://git.chorem.org/chorem.git commit 0e287759c0e44d0d29ffc777b48bacb325ac20b3 Merge: a04f4b2 3f01d6a Author: Yannick Martel <yannick.martel@gmail.com> Date: Thu Apr 2 18:31:51 2015 +0200 Merge branch 'jsonize_wikitty' into chorem-ng .../chorem/webmotion/converters/JsonConverter.java | 4 +- .../chorem/webmotion/converters/JsonHelper.java | 47 +++++++++++++ .../webmotion/injector/InjectorListener.java | 4 +- .../webmotion/converters/JsonConverterTest.java | 76 ++++++++++++++++++++++ 4 files changed, 128 insertions(+), 3 deletions(-) -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch chorem-ng in repository chorem. See http://git.chorem.org/chorem.git commit 03563f001a7ad4ef383c78fc03d1f3c1b6f2ead0 Author: Yannick Martel <yannick.martel@gmail.com> Date: Thu Apr 2 19:59:19 2015 +0200 add 'Simple' Json converter for wikitty and add JsonRender as Default --- .../webmotion/actions/WikittyRestAction.java | 10 +-- .../webmotion/converters/JsonArrayConverter.java | 55 ++++++++++++ .../chorem/webmotion/converters/JsonHelper.java | 98 ++++++++++++++++++++++ .../webmotion/injector/InjectorListener.java | 8 +- .../org/chorem/webmotion/render/JsonRender.java | 40 +++++++++ chorem-webmotion/src/main/resources/mapping | 3 +- 6 files changed, 207 insertions(+), 7 deletions(-) diff --git a/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/WikittyRestAction.java b/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/WikittyRestAction.java index de9cb71..4b20351 100644 --- a/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/WikittyRestAction.java +++ b/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/WikittyRestAction.java @@ -75,6 +75,11 @@ public class WikittyRestAction extends WebMotionController { return result; } + public Wikitty getWikitty(ChoremClient client, String id) { + Wikitty result = client.restore(id); + return result; + } + public Render getWikittiesFromQuery(ChoremClient client, String query) { WikittyQuery q = WikittyQueryParser.parse(query); WikittyQueryResult<Wikitty> qResult = client.findAllByQuery(Wikitty.class, q); @@ -86,11 +91,6 @@ public class WikittyRestAction extends WebMotionController { return new RenderWikitty().setModelWikitty(result); } - public Render getWikitty(ChoremClient client, String id) { - Wikitty result = client.restore(id); - return new RenderWikitty().setModelWikitty(result); - } - public Render getWikittyFieldValue(ChoremClient client, String id, String ext, String field) { RenderWikitty render = new RenderWikitty(); diff --git a/chorem-webmotion/src/main/java/org/chorem/webmotion/converters/JsonArrayConverter.java b/chorem-webmotion/src/main/java/org/chorem/webmotion/converters/JsonArrayConverter.java new file mode 100644 index 0000000..b30f4a9 --- /dev/null +++ b/chorem-webmotion/src/main/java/org/chorem/webmotion/converters/JsonArrayConverter.java @@ -0,0 +1,55 @@ +package org.chorem.webmotion.converters; + +import com.google.common.reflect.TypeParameter; +import com.google.common.reflect.TypeToken; +import org.apache.commons.beanutils.converters.AbstractConverter; + +/** + * @author ymartel <martel@codelutin.com> + */ +public class JsonArrayConverter <O> extends AbstractConverter { + + protected final Class<O[]> arrayType; + + protected final JsonHelper jsonHelper; + + public static <O> JsonArrayConverter<O> newConverter(Class<O> objectType) { + return new JsonArrayConverter<>(objectType); + } + + public JsonArrayConverter(Class<O> entityType) { + + this.arrayType = (Class<O[]>) new TypeToken<O[]>() { + } + .where(new TypeParameter<O>() { + }, entityType) + .getType(); + this.jsonHelper = new JsonHelper(); + } + + @Override + protected <T> T convertToType(Class<T> type, Object value) throws Throwable { + + String stringValue; + + if (value instanceof String) { + + stringValue = (String) value; + + } else { + + stringValue = ((String[]) value)[0]; + + } + + O[] values = jsonHelper.fromJson(stringValue, this.arrayType); + + return (T) values; + + } + + @Override + public Class<?> getDefaultType() { + return arrayType; + } +} \ No newline at end of file diff --git a/chorem-webmotion/src/main/java/org/chorem/webmotion/converters/JsonHelper.java b/chorem-webmotion/src/main/java/org/chorem/webmotion/converters/JsonHelper.java index 024eb15..950625a 100644 --- a/chorem-webmotion/src/main/java/org/chorem/webmotion/converters/JsonHelper.java +++ b/chorem-webmotion/src/main/java/org/chorem/webmotion/converters/JsonHelper.java @@ -24,9 +24,11 @@ package org.chorem.webmotion.converters; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Type; +import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; import com.google.gson.ExclusionStrategy; @@ -44,6 +46,9 @@ import com.google.gson.JsonSerializer; import org.apache.commons.lang.StringUtils; import org.nuiton.wikitty.WikittyException; import org.nuiton.wikitty.entities.BusinessEntity; +import org.nuiton.wikitty.entities.FieldType; +import org.nuiton.wikitty.entities.Wikitty; +import org.nuiton.wikitty.entities.WikittyTypes; /** * @author ymartel <martel@codelutin.com> @@ -134,6 +139,26 @@ public class JsonHelper { }); + gsonBuilder.registerTypeHierarchyAdapter(Wikitty.class, new JsonSerializer<Wikitty>() { + + @Override + public JsonElement serialize(Wikitty src, Type typeOfSrc, JsonSerializationContext context) { + + JsonElement result; + + if (src == null) { + result = JsonNull.INSTANCE; + + } else { + Map<String, Object> srcAsMap = mapifyWikitty(src); + result = context.serialize(srcAsMap); + } + + return result; + } + + }); + this.gson = gsonBuilder.create(); } @@ -152,5 +177,78 @@ public class JsonHelper { return o; } + protected Map<String, Object> mapifyWikitty(Wikitty src) { + + Map<String, Object> srcAsMap = new HashMap(); + + // First classical element : the id + srcAsMap.put("id", src.getWikittyId()); + + // Get all extension names, we will iterate on them + Collection<String> extensionNames = src.getExtensionNames(); + + for (String extensionName : extensionNames) { + + // for each extension, get fields ! + Collection<String> extensionFields = src.getExtensionFields(extensionName); + Map<String, Object> extension = new HashMap(extensionFields.size()); + + for (String extensionField : extensionFields) { + + // Need to manage collection and type + FieldType fieldType = src.getFieldType(extensionName, extensionField); + + if (fieldType.isCollection() && fieldType.getType() == WikittyTypes.WIKITTY) { + // Collection of wikitties + + try { + // Try to get them as wikitty + List<Wikitty> fieldAsWikittyList = src.getFieldAsWikittyList(extensionName, extensionField, true); + if (fieldAsWikittyList != null) { + List<Map<String, Object>> fields = new ArrayList<>(fieldAsWikittyList.size()); + + for (Wikitty fieldAsWikitty : fieldAsWikittyList) { + if (fieldAsWikitty != null) { + Map<String, Object> fieldAsMap = mapifyWikitty(fieldAsWikitty); + fields.add(fieldAsMap); + } + } + extension.put(extensionField, fields); + + } else { + extension.put(extensionField, null); + } + + + } catch (WikittyException e) { + // If WikittyException, cannot load wikitty : use id + extension.put(extensionField, src.getFieldAsObject(extensionName, extensionField)); + } + + } else if (fieldType.getType() == WikittyTypes.WIKITTY) { + // A simple wikitty : try to get it as Wikitty and mapify it ! + try { + Wikitty fieldAsWikitty = src.getFieldAsWikitty(extensionName, extensionField, true); + if (fieldAsWikitty != null) { + Map<String, Object> fieldAsMap = mapifyWikitty(fieldAsWikitty); + extension.put(extensionField, fieldAsMap); + } else { + extension.put(extensionField, null); + } + + } catch (WikittyException e) { + // If WikittyException, cannot load wikitty : use id + extension.put(extensionField, src.getFieldAsObject(extensionName, extensionField)); + } + + } else { + extension.put(extensionField, src.getFieldAsObject(extensionName, extensionField)); + } + } + srcAsMap.put(extensionName, extension); + } + + return srcAsMap; + } } diff --git a/chorem-webmotion/src/main/java/org/chorem/webmotion/injector/InjectorListener.java b/chorem-webmotion/src/main/java/org/chorem/webmotion/injector/InjectorListener.java index 73c87c8..0388439 100644 --- a/chorem-webmotion/src/main/java/org/chorem/webmotion/injector/InjectorListener.java +++ b/chorem-webmotion/src/main/java/org/chorem/webmotion/injector/InjectorListener.java @@ -35,6 +35,7 @@ import org.chorem.webmotion.ChoremWebMotionUtil; import org.chorem.webmotion.PaginatedResult; import org.chorem.webmotion.bean.financial.ExpenseAccountBean; import org.chorem.webmotion.bean.financial.ExpenseAccountEntryBean; +import org.chorem.webmotion.converters.JsonArrayConverter; import org.chorem.webmotion.converters.JsonConverter; import org.debux.webmotion.server.WebMotionServerListener; import org.debux.webmotion.server.call.Call; @@ -43,6 +44,7 @@ import org.debux.webmotion.server.handler.ExecutorParametersInjectorHandler.Inje import org.debux.webmotion.server.mapping.Mapping; import org.nuiton.wikitty.WikittyUtil; import org.nuiton.wikitty.entities.BusinessEntity; +import org.nuiton.wikitty.entities.Wikitty; /** * @author ymartel <martel@codelutin.com> @@ -53,7 +55,8 @@ public class InjectorListener implements WebMotionServerListener { ExpenseAccountBean.class, ExpenseAccountEntryBean.class, PaginatedResult.class, - BusinessEntity.class + BusinessEntity.class, + Wikitty.class ); @Override @@ -112,6 +115,9 @@ public class InjectorListener implements WebMotionServerListener { for (Class<?> beanType : BEAN_TYPES) { context.addConverter(JsonConverter.newConverter(beanType), beanType); + + JsonArrayConverter<?> converter = JsonArrayConverter.newConverter(beanType); + context.addConverter(converter, converter.getDefaultType()); } } diff --git a/chorem-webmotion/src/main/java/org/chorem/webmotion/render/JsonRender.java b/chorem-webmotion/src/main/java/org/chorem/webmotion/render/JsonRender.java new file mode 100644 index 0000000..f226df3 --- /dev/null +++ b/chorem-webmotion/src/main/java/org/chorem/webmotion/render/JsonRender.java @@ -0,0 +1,40 @@ +package org.chorem.webmotion.render; + +import java.io.IOException; +import java.io.PrintWriter; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletResponse; + +import org.chorem.webmotion.converters.JsonHelper; +import org.debux.webmotion.server.call.Call; +import org.debux.webmotion.server.call.HttpContext; +import org.debux.webmotion.server.mapping.Mapping; +import org.debux.webmotion.server.render.Render; + +/** + * @author ymartel <martel@codelutin.com> + */ +public class JsonRender<T> extends Render { + + protected T model; + + public JsonRender(T model) { + this.model = model; + } + + @Override + public void create(Mapping mapping, Call call) throws IOException, ServletException { + + HttpContext context = call.getContext(); + HttpServletResponse response = context.getResponse(); + response.setContentType("application/json"); + + JsonHelper gson = new JsonHelper(); + String json = gson.toJson(model); + + PrintWriter out = context.getOut(); + out.print(json); + + } +} \ No newline at end of file diff --git a/chorem-webmotion/src/main/resources/mapping b/chorem-webmotion/src/main/resources/mapping index 7335f42..f632178 100644 --- a/chorem-webmotion/src/main/resources/mapping +++ b/chorem-webmotion/src/main/resources/mapping @@ -3,7 +3,7 @@ package.views=WEB-INF/jsp package.filters=org.chorem.webmotion.filters package.actions=org.chorem.webmotion.actions server.listener.class=org.chorem.webmotion.injector.InjectorListener -default.render=org.debux.webmotion.server.render.DefaultRender +default.render=org.chorem.webmotion.render.JsonRender [filters] * /* ChoremClientFilter.inject @@ -11,6 +11,7 @@ default.render=org.debux.webmotion.server.render.DefaultRender [actions] GET /services/v1/{extension} action:WikittyRestAction.getWikitties +GET /services/v1/{extension}/{id} action:WikittyRestAction.getWikitty #* /logout action:Ge#nericAction.logout #* /wikitty/{extension}/search action:Ge#nericAction.search -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm