From 7bb170bd7d50483c5f9b9b1b3c011666e8657ab6 Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Tue, 9 Apr 2013 03:18:48 -0300 Subject: [PATCH 01/32] =?UTF-8?q?Desenvolvimento=20de=20feature=20de=20inf?= =?UTF-8?q?orma=C3=A7=C3=A3o=20contextual?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neste patch, parte da estrutura dos testes é definida e algumas funções do tipo "page.containsMemberLogin" são usadas para prover a funcionalidade, embora alguns forms ainda não tenham o devido suporte a members e, portanto, os testes falham. Em teoria, eu deveria ser capaz de capturar do form a lista de membros no momento e daí eu preciso checar se pelo menos algum deles corresponde ao usuário que está logado (neste caso, usuario admin). --- test/cucumber/BookChapter.feature | 6 ++++++ test/cucumber/Conferencia.feature | 8 +++++++- test/cucumber/Dissertacao.feature | 7 ++++++- test/cucumber/Ferramenta.feature | 7 +++++-- test/cucumber/TechnicalReport.feature | 12 ++++++------ test/cucumber/steps/BookChapterSteps.groovy | 5 +++++ test/cucumber/steps/ConferenciaSteps.groovy | 7 ++++++- test/cucumber/steps/DissertacaoSteps.groovy | 12 +++++++++++- test/cucumber/steps/FerramentaSteps.groovy | 5 +++++ test/cucumber/steps/TechnicalReportSteps.groovy | 5 +++++ test/functional/pages/BookChapterCreatePage.groovy | 6 ++++++ test/functional/pages/BookChapterPage.groovy | 2 +- test/functional/pages/ConferenciaCreatePage.groovy | 6 ++++++ 13 files changed, 75 insertions(+), 13 deletions(-) diff --git a/test/cucumber/BookChapter.feature b/test/cucumber/BookChapter.feature index 001c81db..547a3b3b 100644 --- a/test/cucumber/BookChapter.feature +++ b/test/cucumber/BookChapter.feature @@ -31,3 +31,9 @@ Feature: BookChapter When I select the "Book Chapter" option at the publication menu And I select the Novo BookChapter option at the book chapter page Then I can fill the book chapter details + + Scenario: new book chapter filled with user data by default + Given I am at the publication menu + When I select the "Book Chapter" option at the publication menu + And I select the Novo BookChapter option at the book chapter page + Then I see my user listed as a member of book chapter by default \ No newline at end of file diff --git a/test/cucumber/Conferencia.feature b/test/cucumber/Conferencia.feature index 44230a7e..48139364 100644 --- a/test/cucumber/Conferencia.feature +++ b/test/cucumber/Conferencia.feature @@ -28,4 +28,10 @@ Feature: conferencia Scenario: list conferencia web Given I am at the publications menu When I select the conferencia option at the publications menu - Then a list of conferencias stored by the system is displayed at the conferencia page \ No newline at end of file + Then a list of conferencias stored by the system is displayed at the conferencia page + + Scenario: new conferencia web has user data filled by default + Given I am at the publications and conferencias menu + When I select the conferencia option at the publications menu + And I select the new conferencia option at the conferencia page + Then I see my user listed as an author member of conferencia by default diff --git a/test/cucumber/Dissertacao.feature b/test/cucumber/Dissertacao.feature index e3a7e2bf..49dbba22 100644 --- a/test/cucumber/Dissertacao.feature +++ b/test/cucumber/Dissertacao.feature @@ -41,4 +41,9 @@ Scenario: delete dissertation And I delete it Then the system has no dissertation entitled "Dissertacao Teste4" - \ No newline at end of file +Scenario: create a new dissertation with user data already filled by default + Given I am at the publications menu + When I select the "Dissertacao" option at the program menu + And I select the new dissertation option at the dissertation page + Then I see my user listed as an author member of dissertation by default + And I see my school name as school of dissertation by default diff --git a/test/cucumber/Ferramenta.feature b/test/cucumber/Ferramenta.feature index 0532f8a2..d83dd028 100644 --- a/test/cucumber/Ferramenta.feature +++ b/test/cucumber/Ferramenta.feature @@ -26,5 +26,8 @@ Scenario: new ferramenta without any information And I select the create option at the ferramenta page Then The ferramenta is not stored - - \ No newline at end of file +Scenario: new ferramenta filled with user data by default + Given I am at the publications menu + When I select the "Ferramenta" option at the program menu + And I select the new ferramenta option at the ferramenta page + Then I see my user listed as an author member of ferramenta by default diff --git a/test/cucumber/TechnicalReport.feature b/test/cucumber/TechnicalReport.feature index 09476f36..6284c40c 100644 --- a/test/cucumber/TechnicalReport.feature +++ b/test/cucumber/TechnicalReport.feature @@ -27,9 +27,9 @@ Scenario: edit existing technical report wrong value Given The system has an technical report entitled "NFL Languages System" with file name "NFL.pdf" When I edit the technical report title from "NFL Languages System" to "" Then The technical report "NFL Languages System" is not updated by the system - - - - - - + +Scenario: new technical report web has user data already filled by default + Given I am at the publications menu + And I select the "Technical Report" option at the publications menu + When I click on "New TechnicalReport" option at Technical Report list + Then I see my user listed as an author member of technical report by default diff --git a/test/cucumber/steps/BookChapterSteps.groovy b/test/cucumber/steps/BookChapterSteps.groovy index e0c03ebe..d30fece6 100644 --- a/test/cucumber/steps/BookChapterSteps.groovy +++ b/test/cucumber/steps/BookChapterSteps.groovy @@ -97,3 +97,8 @@ And (~'^I fill only the title field at book chapter create page$') { -> Then(~'^I still on the book chapter create page$') { -> at BookChapterCreatePage } + +Then(~'^I see my user listed as a member of book chapter by default$') { -> + at BookChapterCreatePage + assert page.containsMemberLogin("admin") +} \ No newline at end of file diff --git a/test/cucumber/steps/ConferenciaSteps.groovy b/test/cucumber/steps/ConferenciaSteps.groovy index 42fcd393..3dc3dfb5 100644 --- a/test/cucumber/steps/ConferenciaSteps.groovy +++ b/test/cucumber/steps/ConferenciaSteps.groovy @@ -66,4 +66,9 @@ Then(~'^I can fill the conferencia details$') { -> Then(~'^a list of conferencias stored by the system is displayed at the conferencia page$') { -> at ConferenciaPage page.listConferencia() -} \ No newline at end of file +} + +Then(~'^I see my user listed as an author member of conferencia by default$') { -> + at ConferenciaCreatePage + assert page.containsMemberLogin("admin") +} diff --git a/test/cucumber/steps/DissertacaoSteps.groovy b/test/cucumber/steps/DissertacaoSteps.groovy index 26cfdef2..fa3a7907 100644 --- a/test/cucumber/steps/DissertacaoSteps.groovy +++ b/test/cucumber/steps/DissertacaoSteps.groovy @@ -77,4 +77,14 @@ Then(~'^the dissertation "([^"]*)" is not stored twice$') { String title -> When(~'^I create the dissertation "([^"]*)" with file name "([^"]*)" without school$') { String title, filename -> TestDataAndOperations.createDissertacaoWithotSchool(title, filename); -} \ No newline at end of file +} + +Then(~'^I see my user listed as an author member of dissertation by default$') { -> + // FIXME: implement this function. + assert false +} + +Then(~'^I see my school name as school of dissertation by default$') { -> + // FIXME: implement this function. + assert false +} diff --git a/test/cucumber/steps/FerramentaSteps.groovy b/test/cucumber/steps/FerramentaSteps.groovy index da80d7e0..596e9267 100644 --- a/test/cucumber/steps/FerramentaSteps.groovy +++ b/test/cucumber/steps/FerramentaSteps.groovy @@ -84,3 +84,8 @@ Then(~'^the ferramenta "([^"]*)" is properly stored by the system$') { String ti assert ferramenta != null } +Then(~'^I see my user listed as an author member of ferramenta by default$') { -> + // FIXME: implement this function. + assert false +} + diff --git a/test/cucumber/steps/TechnicalReportSteps.groovy b/test/cucumber/steps/TechnicalReportSteps.groovy index 3cd15226..7ee9c202 100644 --- a/test/cucumber/steps/TechnicalReportSteps.groovy +++ b/test/cucumber/steps/TechnicalReportSteps.groovy @@ -79,3 +79,8 @@ Then(~'^The technical report "([^"]*)" is not updated by the system$') { String assert tech != null } +Then(~'^I see my user listed as an author member of technical report by default$') { -> + // FIXME: implement this function. + assert false +} + diff --git a/test/functional/pages/BookChapterCreatePage.groovy b/test/functional/pages/BookChapterCreatePage.groovy index 7f72117f..2c15434a 100644 --- a/test/functional/pages/BookChapterCreatePage.groovy +++ b/test/functional/pages/BookChapterCreatePage.groovy @@ -30,4 +30,10 @@ class BookChapterCreatePage extends Page{ $("form").title = "A theory of Software Product Line Refinement" $("form").create().click() } + + def containsMemberLogin (login) { + // FIXME: page form should have members property + // $("form").members.findAll{ member -> member.username == login }.size() > 0 + false + } } diff --git a/test/functional/pages/BookChapterPage.groovy b/test/functional/pages/BookChapterPage.groovy index e8410b4f..51140d7b 100644 --- a/test/functional/pages/BookChapterPage.groovy +++ b/test/functional/pages/BookChapterPage.groovy @@ -7,7 +7,7 @@ class BookChapterPage extends Page{ static url = "bookChapter/list" static at = { - title ==~ /BookChapter Listagem/ + //title ==~ /BookChapter Listagem/ } static content = { diff --git a/test/functional/pages/ConferenciaCreatePage.groovy b/test/functional/pages/ConferenciaCreatePage.groovy index bb25cb4b..f0fdb47a 100644 --- a/test/functional/pages/ConferenciaCreatePage.groovy +++ b/test/functional/pages/ConferenciaCreatePage.groovy @@ -30,4 +30,10 @@ class ConferenciaCreatePage extends Page{ $("form").title = "A theory of Software Product Line Refinement" $("form").create().click() } + + def containsMemberLogin (login) { + // FIXME: page form should have members property + // $("form").members.findAll{ member -> member.username == login }.size() > 0 + false + } } From 222992bf214e8faf7a780a2d79159a5c986e56ff Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Thu, 11 Apr 2013 04:09:09 -0300 Subject: [PATCH 02/32] =?UTF-8?q?Informa=C3=A7=C3=A3o=20contextual=20em=20?= =?UTF-8?q?BookChapter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit É inserido o suporte à auto-seleção do usuário logado como membro de um BookChapter no momento de sua criação. Também é inserido um caso de teste para verificar se o item está mesmo selecionado. --- grails-app/views/bookChapter/_form.gsp | 7 ++++--- test/cucumber/steps/BookChapterSteps.groovy | 4 +++- test/functional/pages/BookChapterCreatePage.groovy | 6 ++---- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/grails-app/views/bookChapter/_form.gsp b/grails-app/views/bookChapter/_form.gsp index ef1a7b5f..5a2d92e8 100644 --- a/grails-app/views/bookChapter/_form.gsp +++ b/grails-app/views/bookChapter/_form.gsp @@ -1,5 +1,6 @@ <%@page import="rgms.member.Member"%> <%@ page import="rgms.publication.BookChapter" %> +<%@ page import="org.apache.shiro.SecurityUtils" %> @@ -55,9 +56,9 @@ * - - + + diff --git a/test/cucumber/steps/BookChapterSteps.groovy b/test/cucumber/steps/BookChapterSteps.groovy index d30fece6..3067a848 100644 --- a/test/cucumber/steps/BookChapterSteps.groovy +++ b/test/cucumber/steps/BookChapterSteps.groovy @@ -3,6 +3,7 @@ import pages.BookChapterPage import pages.LoginPage import pages.PublicationsPage import rgms.publication.BookChapter +import rgms.member.Member import steps.TestDataAndOperations import static cucumber.api.groovy.EN.* @@ -100,5 +101,6 @@ Then(~'^I still on the book chapter create page$') { -> Then(~'^I see my user listed as a member of book chapter by default$') { -> at BookChapterCreatePage - assert page.containsMemberLogin("admin") + userData = Member.findByUsername('admin').id.toString() + assert page.selectedMembers().contains(userData) } \ No newline at end of file diff --git a/test/functional/pages/BookChapterCreatePage.groovy b/test/functional/pages/BookChapterCreatePage.groovy index 2c15434a..59fa4d17 100644 --- a/test/functional/pages/BookChapterCreatePage.groovy +++ b/test/functional/pages/BookChapterCreatePage.groovy @@ -31,9 +31,7 @@ class BookChapterCreatePage extends Page{ $("form").create().click() } - def containsMemberLogin (login) { - // FIXME: page form should have members property - // $("form").members.findAll{ member -> member.username == login }.size() > 0 - false + def selectedMembers() { + $("form").members } } From ed07ebae80c57a325c2b723343e564e7128b78f4 Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Thu, 11 Apr 2013 04:38:03 -0300 Subject: [PATCH 03/32] =?UTF-8?q?Informa=C3=A7=C3=A3o=20contextual=20em=20?= =?UTF-8?q?Conferencia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Suporte à seleção automática do usuário logado na sessão como membro de uma nova conferência. Também é inserido um teste para checar se a seleção está correta. --- grails-app/views/conferencia/_form.gsp | 6 +++--- test/cucumber/steps/ConferenciaSteps.groovy | 4 +++- test/functional/pages/ConferenciaCreatePage.groovy | 6 ++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/grails-app/views/conferencia/_form.gsp b/grails-app/views/conferencia/_form.gsp index c8787019..82f3a984 100644 --- a/grails-app/views/conferencia/_form.gsp +++ b/grails-app/views/conferencia/_form.gsp @@ -1,6 +1,6 @@ <%@page import="rgms.member.Member"%> <%@ page import="rgms.publication.Conferencia" %> - +<%@ page import="org.apache.shiro.SecurityUtils" %>
@@ -57,8 +57,8 @@ * - +
diff --git a/test/cucumber/steps/ConferenciaSteps.groovy b/test/cucumber/steps/ConferenciaSteps.groovy index 3dc3dfb5..73860e90 100644 --- a/test/cucumber/steps/ConferenciaSteps.groovy +++ b/test/cucumber/steps/ConferenciaSteps.groovy @@ -4,6 +4,7 @@ import pages.LoginPage import pages.PublicationsPage import rgms.publication.Conferencia import rgms.publication.Publication +import rgms.member.Member import steps.TestDataAndOperations import static cucumber.api.groovy.EN.* @@ -70,5 +71,6 @@ Then(~'^a list of conferencias stored by the system is displayed at the conferen Then(~'^I see my user listed as an author member of conferencia by default$') { -> at ConferenciaCreatePage - assert page.containsMemberLogin("admin") + userData = Member.findByUsername('admin').id.toString() + assert page.selectedMembers().contains(userData) } diff --git a/test/functional/pages/ConferenciaCreatePage.groovy b/test/functional/pages/ConferenciaCreatePage.groovy index f0fdb47a..8dc3fd7d 100644 --- a/test/functional/pages/ConferenciaCreatePage.groovy +++ b/test/functional/pages/ConferenciaCreatePage.groovy @@ -31,9 +31,7 @@ class ConferenciaCreatePage extends Page{ $("form").create().click() } - def containsMemberLogin (login) { - // FIXME: page form should have members property - // $("form").members.findAll{ member -> member.username == login }.size() > 0 - false + def selectedMembers() { + $("form").members } } From bd99265b39ba8bc233a368994157bd6960dcfdbe Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Tue, 16 Apr 2013 03:18:23 -0300 Subject: [PATCH 04/32] =?UTF-8?q?Adicionar=20informa=C3=A7=C3=A3o=20contex?= =?UTF-8?q?tual=20em=20Disserta=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Quando possível, inserir com informações do usuário no formulário de criação de uma dissertação. Neste caso, os stubs do teste foram implementados e o novo cenário implementado. --- grails-app/views/dissertacao/_form.gsp | 6 +++--- test/cucumber/steps/DissertacaoSteps.groovy | 11 +++++++---- test/functional/pages/DissertationCreate.groovy | 8 ++++++++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/grails-app/views/dissertacao/_form.gsp b/grails-app/views/dissertacao/_form.gsp index 68b9aad8..07d35cc9 100644 --- a/grails-app/views/dissertacao/_form.gsp +++ b/grails-app/views/dissertacao/_form.gsp @@ -1,6 +1,6 @@ <%@page import="rgms.member.Member"%> <%@ page import="rgms.publication.Dissertacao" %> - +<%@ page import="org.apache.shiro.SecurityUtils" %>
@@ -40,7 +40,7 @@ * - +
@@ -58,7 +58,7 @@ + value="${dissertacaoInstance?.members ? dissertacaoInstance.members : Member.findByUsername(SecurityUtils.subject?.principal).id}" />
diff --git a/test/cucumber/steps/DissertacaoSteps.groovy b/test/cucumber/steps/DissertacaoSteps.groovy index fa3a7907..8fb0b2b5 100644 --- a/test/cucumber/steps/DissertacaoSteps.groovy +++ b/test/cucumber/steps/DissertacaoSteps.groovy @@ -6,6 +6,7 @@ import pages.DissertationCreate import pages.DissertationShowPage import pages.DissertationEditPage import rgms.publication.Dissertacao +import rgms.member.Member import static cucumber.api.groovy.EN.* @@ -80,11 +81,13 @@ When(~'^I create the dissertation "([^"]*)" with file name "([^"]*)" without sch } Then(~'^I see my user listed as an author member of dissertation by default$') { -> - // FIXME: implement this function. - assert false + at DissertationCreate + userData = Member.findByUsername('admin').id.toString() + assert page.selectedMembers().contains(userData) } Then(~'^I see my school name as school of dissertation by default$') { -> - // FIXME: implement this function. - assert false + at DissertationCreate + userData = Member.findByUsername('admin').university + assert page.currentSchool() == userData } diff --git a/test/functional/pages/DissertationCreate.groovy b/test/functional/pages/DissertationCreate.groovy index 36f68f52..124c66cb 100644 --- a/test/functional/pages/DissertationCreate.groovy +++ b/test/functional/pages/DissertationCreate.groovy @@ -22,5 +22,13 @@ class DissertationCreate extends Page { $("form").create().click() // Could parametrize, obtaining data from class TestDataAndOperations } + + def currentSchool() { + $("form").school + } + + def selectedMembers() { + $("form").members + } } From 0d675ff970175bd7b96bb46abc45fddae08c2662 Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Tue, 16 Apr 2013 13:38:35 -0300 Subject: [PATCH 05/32] =?UTF-8?q?Informa=C3=A7=C3=A3o=20contextual=20na=20?= =?UTF-8?q?feature=20Ferramenta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ao tentar criar uma nova ferramenta, se o usuário estiver logado, ele deveria estar selecionado como um dos membros autores por padrão. Neste patch, esse cenário é testado e implementado na view. --- grails-app/views/ferramenta/_form.gsp | 4 ++-- test/cucumber/steps/FerramentaSteps.groovy | 6 ++++-- test/functional/pages/FerramentaCreate.groovy | 4 ++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/grails-app/views/ferramenta/_form.gsp b/grails-app/views/ferramenta/_form.gsp index 1ca659c6..50046f49 100644 --- a/grails-app/views/ferramenta/_form.gsp +++ b/grails-app/views/ferramenta/_form.gsp @@ -1,6 +1,6 @@ <%@page import="rgms.member.Member"%> <%@ page import="rgms.publication.Ferramenta" %> - +<%@ page import="org.apache.shiro.SecurityUtils" %>
@@ -58,7 +58,7 @@ + value="${ferramentaInstance?.members ? ferramentaInstance.members : Member.findByUsername(SecurityUtils.subject?.principal).id}" />
diff --git a/test/cucumber/steps/FerramentaSteps.groovy b/test/cucumber/steps/FerramentaSteps.groovy index 596e9267..e84587e9 100644 --- a/test/cucumber/steps/FerramentaSteps.groovy +++ b/test/cucumber/steps/FerramentaSteps.groovy @@ -7,6 +7,7 @@ import pages.FerramentaShowPage import pages.FerramentaEditPage import rgms.publication.Dissertacao import rgms.publication.Ferramenta +import rgms.member.Member import static cucumber.api.groovy.EN.* @@ -85,7 +86,8 @@ Then(~'^the ferramenta "([^"]*)" is properly stored by the system$') { String ti } Then(~'^I see my user listed as an author member of ferramenta by default$') { -> - // FIXME: implement this function. - assert false + at FerramentaCreate + userData = Member.findByUsername('admin').id.toString() + assert page.selectedMembers().contains(userData) } diff --git a/test/functional/pages/FerramentaCreate.groovy b/test/functional/pages/FerramentaCreate.groovy index 494bb72e..684ad5d2 100644 --- a/test/functional/pages/FerramentaCreate.groovy +++ b/test/functional/pages/FerramentaCreate.groovy @@ -30,5 +30,9 @@ class FerramentaCreate extends Page { def createNewFerramentaWithoutInformation(){ $("form").create().click() } + + def selectedMembers() { + $("form").members + } } From 8bc4d3fe9b637aedb7c2a08a45107d498ff35d68 Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Tue, 16 Apr 2013 14:06:00 -0300 Subject: [PATCH 06/32] =?UTF-8?q?Informa=C3=A7=C3=A3o=20contextual=20em=20?= =?UTF-8?q?TechnicalReport?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Se o usuário estiver logado, fazer com que seu nome fique selecionado por padrão em autores. Neste patch também é implementado o cenário e há modificações na view para dar esse suporte. Além disso, foi adicionado um passo para se chegar à pagina de criação de TechnicalReport e comentado algumas linhas que não fazem sentido no contexto do TechnicalReport. --- grails-app/views/technicalReport/_form.gsp | 4 ++-- test/cucumber/steps/TechnicalReportSteps.groovy | 11 +++++++++-- .../functional/pages/TechnicalReportCreatePage.groovy | 8 ++++++-- test/functional/pages/TechnicalReportPage.groovy | 2 +- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/grails-app/views/technicalReport/_form.gsp b/grails-app/views/technicalReport/_form.gsp index ac54dfd2..3cf203f3 100644 --- a/grails-app/views/technicalReport/_form.gsp +++ b/grails-app/views/technicalReport/_form.gsp @@ -1,6 +1,6 @@ <%@page import="rgms.member.Member"%> <%@ page import="rgms.publication.TechnicalReport" %> - +<%@ page import="org.apache.shiro.SecurityUtils" %>
@@ -50,7 +50,7 @@ + value="${technicalReportInstance?.members ? technicalReportInstance.members : Member.findByUsername(SecurityUtils.subject?.principal).id}" />
diff --git a/test/cucumber/steps/TechnicalReportSteps.groovy b/test/cucumber/steps/TechnicalReportSteps.groovy index 7ee9c202..c64baefb 100644 --- a/test/cucumber/steps/TechnicalReportSteps.groovy +++ b/test/cucumber/steps/TechnicalReportSteps.groovy @@ -5,6 +5,7 @@ import pages.TechnicalReportEditPage import pages.LoginPage import pages.PublicationsPage import rgms.publication.TechnicalReport +import rgms.member.Member import steps.TestDataAndOperations import static cucumber.api.groovy.EN.* @@ -79,8 +80,14 @@ Then(~'^The technical report "([^"]*)" is not updated by the system$') { String assert tech != null } +When(~'^I click on "New TechnicalReport" option at Technical Report list$') { -> + at TechnicalReportPage + page.selectNewTechnicalReport() +} + Then(~'^I see my user listed as an author member of technical report by default$') { -> - // FIXME: implement this function. - assert false + at TechnicalReportCreatePage + userData = Member.findByUsername('admin').id.toString() + assert page.selectedMembers().contains(userData) } diff --git a/test/functional/pages/TechnicalReportCreatePage.groovy b/test/functional/pages/TechnicalReportCreatePage.groovy index 82ef9fe7..04594078 100644 --- a/test/functional/pages/TechnicalReportCreatePage.groovy +++ b/test/functional/pages/TechnicalReportCreatePage.groovy @@ -6,8 +6,8 @@ class TechnicalReportCreatePage extends Page { static url = "technicalReport/create" static at = { - title ==~ /Criar Technical Report/ - journal != null + title ==~ /Criar TechnicalReport/ + //journal != null } static content = { @@ -21,4 +21,8 @@ class TechnicalReportCreatePage extends Page { $("form").journal = "Theoretical Computer Science" // Could parametrize, obtaining data from class TestDataAndOperations } + + def selectedMembers() { + $("form").members + } } diff --git a/test/functional/pages/TechnicalReportPage.groovy b/test/functional/pages/TechnicalReportPage.groovy index e12cc5dd..fee63c4a 100644 --- a/test/functional/pages/TechnicalReportPage.groovy +++ b/test/functional/pages/TechnicalReportPage.groovy @@ -14,7 +14,7 @@ class TechnicalReportPage extends Page { } - def selectNewArticle() { + def selectNewTechnicalReport() { $('a.create').click() } From 5ae9bc03c7e83670720353ee8542d35db12e2798 Mon Sep 17 00:00:00 2001 From: baff Date: Wed, 10 Apr 2013 17:42:51 -0300 Subject: [PATCH 07/32] Tests and description of News feature --- .gitignore | 8 +++ .../rgms/news/NewsController.groovy | 6 ++ grails-app/domain/rgms/news/News.groovy | 14 +++++ test/cucumber/News.feature | 30 ++++++++++ test/cucumber/steps/MemberSteps.groovy | 2 +- test/cucumber/steps/NewsSteps.groovy | 59 +++++++++++++++++++ .../steps/TestDataAndOperations.groovy | 38 +++++++++++- 7 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 grails-app/controllers/rgms/news/NewsController.groovy create mode 100644 grails-app/domain/rgms/news/News.groovy create mode 100644 test/cucumber/News.feature create mode 100644 test/cucumber/steps/NewsSteps.groovy diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..c573c743 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +/target +/target-eclipse +*.class +.classpath +.project +.settings/ +/web-app +/test/unit \ No newline at end of file diff --git a/grails-app/controllers/rgms/news/NewsController.groovy b/grails-app/controllers/rgms/news/NewsController.groovy new file mode 100644 index 00000000..641c6d2d --- /dev/null +++ b/grails-app/controllers/rgms/news/NewsController.groovy @@ -0,0 +1,6 @@ +package rgms.news + +class NewsController { + + def index() { } +} diff --git a/grails-app/domain/rgms/news/News.groovy b/grails-app/domain/rgms/news/News.groovy new file mode 100644 index 00000000..0cf0b54d --- /dev/null +++ b/grails-app/domain/rgms/news/News.groovy @@ -0,0 +1,14 @@ +package rgms.news + +class News { + + String description + Date date + + static constraints = { + description blank:false + date blank:false + } + + +} diff --git a/test/cucumber/News.feature b/test/cucumber/News.feature new file mode 100644 index 00000000..91961a8a --- /dev/null +++ b/test/cucumber/News.feature @@ -0,0 +1,30 @@ +@i9n +Feature: news + As research group member in RMGS system + I want to publish, remove and modify news about our researches, schedule and any other thing. + Jointly this I want too integrate an twitter account to publish news into RGMS system. + + Scenario: new news + Given the system has no news with description "noticia1teste" and date "07/04/2013" + When I create a news with description "noticia1teste" and date "07/04/2013" + Then the news with description "noticia1teste" and date "07/04/2013" is properly stored by the system + + Scenario: delete news + Given the system has a news with description "noticia1teste" and date "07/04/2013" + When I delete a news with description "noticia1teste" and date "07/04/2013" + Then the news with "noticia1teste" and date "07/04/2013" doesnt exists + + Scenario: new news with existing + Given the system has a news with description "noticia1teste" and date "07/04/2013" + When I create a news with description "noticia1teste" and date "07/04/2013" + Then the news with "noticia1teste" and date "07/04/2013" is not registered + + Scenario: integrate Twitter account + Given the research group "RGTST" in the system has no Twitter account associated + When I associate the account "testtt@teste.com" to "RGTST" group + Then the news of "RGTST" research group can be retrieved by a Twitter post of "testtt@teste.com" + + +/***** + *** especificar a forma de atualização de noticia, via job, via ação no menu... + *****/ \ No newline at end of file diff --git a/test/cucumber/steps/MemberSteps.groovy b/test/cucumber/steps/MemberSteps.groovy index 5079628f..8ce3bfa9 100644 --- a/test/cucumber/steps/MemberSteps.groovy +++ b/test/cucumber/steps/MemberSteps.groovy @@ -84,7 +84,7 @@ When(~'^I create the member with username "([^"]*)"$') { String username -> Then(~'^the member "([^"]*)" is not registered$') { String username -> members= Member.findAllByUsername(username) - assert members.size() == 1 + assert members.size() == 1 } diff --git a/test/cucumber/steps/NewsSteps.groovy b/test/cucumber/steps/NewsSteps.groovy new file mode 100644 index 00000000..211332cb --- /dev/null +++ b/test/cucumber/steps/NewsSteps.groovy @@ -0,0 +1,59 @@ +import java.lang.reflect.Member; +import rgms.member.ResearchGroup; + +Given(~'^the system has no news with description "([^"]*)" and date "([^"]*)"$') { String description, @Format("dd/MM/yyyy") Date date -> + news = News.findByDescriptionAndDate(description, date); + assert news == null +} + +When(~'^I create a news with description "([^"]*)" and date "([^"]*)"$') { String description, @Format("dd/MM/yyyy") Date date -> + TestDataAndOperations.createNews(description,date) +} + +Then(~'^the news with description "([^"]*)" and date "([^"]*)" is properly stored by the system$') { String description, @Format("dd/MM/yyyy") Date date -> + news = News.findByDescriptionAndDate(description, date); + assert news != null +} + +Given(~'^the system has a news with description "([^"]*)" and date "([^"]*)"$') { String description, @Format("dd/MM/yyyy") Date date -> + TestDataAndOperations.createNews(description,date) + news = News.findByDescriptionAndDate(description, date); + assert news != null +} + +When(~'^I delete a news with description "([^"]*)" and date "([^"]*)"$') { String description, @Format("dd/MM/yyyy") Date date -> + TestDataAndOperations.deleteNews(description,date); +} + +Then(~'^the news with "([^"]*)" and date "([^"]*)" doesnt exists$') { String description, @Format("dd/MM/yyyy") Date date -> + news = News.findByDescriptionAndDate(description, date); + assert news = null +} + +When(~'^I create a news with description "([^"]*)" and date "([^"]*)"$') { String description, @Format("dd/MM/yyyy") Date date -> + TestDataAndOperations.createNews(description,date); +} + +Then(~'^the news with "([^"]*)" and date "([^"]*)" is not registered$') { String description, @Format("dd/MM/yyyy") Date date -> + news = News.findByDescriptionAndDate(description, date); + assert news.size() == 1 +} + +Given(~'^the research group "([^"]*)" in the system has no Twitter account associated$') { String groupName -> + researchGroup = TestDataAndOperations.createResearchGroup(groupName); + assert researchGroup.twitterAccount == "" +} + +When(~'^I associate the account "([^"]*)" to "([^"]*)" group$') { String twitterAcount, String groupName -> + researchGroup = ResearchGroup.findResearchGroupByGroupName(groupName) + TestDataAndOperations.editResearchGroupTwitterAccount(researchGroup, twitterAccount) + researchGroup = ResearchGroup.findResearchGroupByGroupName(groupName) + assert researchGroup.twitterAccount == twitterAccount +} + +Then(~'^the news of "([^"]*)" research group can be retrieved by a Twitter post of "([^"]*)" acount$') { String groupName -> + researchGroup = ResearchGroup.findResearchGroupByGroupName(groupName) + TwitterConnection conn = new TwitterConnection(acount:researchGroup.twitterAcount) + listNews = conn.listNews() + assert listNews != null +} \ No newline at end of file diff --git a/test/functional/steps/TestDataAndOperations.groovy b/test/functional/steps/TestDataAndOperations.groovy index e7ece2be..f1554558 100644 --- a/test/functional/steps/TestDataAndOperations.groovy +++ b/test/functional/steps/TestDataAndOperations.groovy @@ -74,6 +74,9 @@ static reports = [ [name: "Rebeca Souza", username: "rebecasouza", email: "rsa2fake@cin.ufpe.br", status: "Graduate Student", university: "UFPE", enabled: true ]] + static news = [ + [descrition: "Desc1", date: Calendar.getInstance().getTime()], + [descrition: "Desc2", date: Calendar.getInstance().getTime()]] static researchgroups = [ [name: "SWPRG", @@ -104,11 +107,18 @@ static public def findArticleByTitle(String title) { } static public def findByUsername(String username) { - members.find { member -> + members.find { member -> member.username == username + } + } +static public def findByDescriptionAndDate(String description, Date date) { + news.find { news -> + news.description == description + news.date == date } } + static public def findRecordByStatus(def status) { records.find{ record -> record.status_H == status @@ -274,6 +284,14 @@ static public void editResearchGroup(def researchGroup, String newName, String n researchGroupController.response.reset() } +static public void editResearchGroupTwitterAccount(def researchGroup, String newTwitterAccount) { + def researchGroupController = new ResearchGroupController() + researchGroupController.params << [twitterAccount: newTwitterAccount] << [id : researchGroup.getId()] + researchGroupController.edit() + researchGroupController.save() + researchGroupController.response.reset() +} + static public void createBookChapter (String title, filename){ def cont = new BookChapterController() def date = new Date() @@ -328,6 +346,14 @@ static public void createMember(String username) { cont.response.reset() } +static public void createNews(String descriptionParam, Date dateParam) { + /*def cont = new NewsController() + cont.params << [description: descriptionParam, date: dateParam] + cont.create() + cont.save() + cont.response.reset()*/ +} + static public boolean compatibleTechTo(tech, title) { def testtech = TechnicalReport.findByTitle(title) @@ -405,6 +431,16 @@ static public void deleteMember(String username) { cont.response.reset() } +static public void deleteNews(String description, Date date) { +// def cont = new NewsController() +// def identificador = News.findByDescriptionAndDate(description,date).id +// cont.params << [id: identificador] +// cont.request.setContent(new byte[1000]) // Could also vary the request content. +// cont.delete() +// //cont.save() +// cont.response.reset() +} + static void clearArticles() { Periodico.findAll()*.delete flush: true // Could also delete the created files. From 3c4ba349749950b49a73177e20f741cc5ae74f78 Mon Sep 17 00:00:00 2001 From: baff Date: Sun, 14 Apr 2013 11:26:12 -0300 Subject: [PATCH 08/32] NEWS: Test and feature implemented --- application.properties | 3 +- .../member/ResearchGroupController.groovy | 3 +- .../rgms/news/NewsController.groovy | 51 +++++++++++ .../domain/rgms/member/ResearchGroup.groovy | 8 +- grails-app/domain/rgms/news/News.groovy | 9 +- grails-app/i18n/messages.properties | 5 ++ test/cucumber/News.feature | 43 +++++---- test/cucumber/steps/NewsSteps.groovy | 87 +++++++++++-------- .../steps/TestDataAndOperations.groovy | 50 +++++------ 9 files changed, 171 insertions(+), 88 deletions(-) diff --git a/application.properties b/application.properties index 24bb2d6c..8d07ae31 100644 --- a/application.properties +++ b/application.properties @@ -1,5 +1,5 @@ #Grails Metadata file -#Sat Apr 06 17:59:31 BRT 2013 +#Wed Apr 10 20:34:02 BRT 2013 app.grails.version=2.1.0 app.name=rgms app.servlet.version=2.5 @@ -13,3 +13,4 @@ plugins.mail=1.0.1 plugins.pdf=0.6 plugins.shiro=1.1.4 plugins.shiro-ui=1.2.0-SNAPSHOT +plugins.twitter=0.2 diff --git a/grails-app/controllers/rgms/member/ResearchGroupController.groovy b/grails-app/controllers/rgms/member/ResearchGroupController.groovy index 271a72b5..4dbe0d52 100644 --- a/grails-app/controllers/rgms/member/ResearchGroupController.groovy +++ b/grails-app/controllers/rgms/member/ResearchGroupController.groovy @@ -24,7 +24,7 @@ class ResearchGroupController { def save() { def researchGroupInstance = new ResearchGroup(params) - if (!researchGroupInstance.save(flush: true)) { + if (!researchGroupInstance.save(flush: true)) { render(view: "create", model: [researchGroupInstance: researchGroupInstance]) return } @@ -45,6 +45,7 @@ class ResearchGroupController { def edit() { def researchGroupInstance = ResearchGroup.get(params.id) + assert researchGroupInstance != null if (!researchGroupInstance) { flash.message = message(code: 'default.not.found.message', args: [message(code: 'researchGroup.label', default: 'Research Group'), params.id]) //redirect(action: "list") diff --git a/grails-app/controllers/rgms/news/NewsController.groovy b/grails-app/controllers/rgms/news/NewsController.groovy index 641c6d2d..249132f9 100644 --- a/grails-app/controllers/rgms/news/NewsController.groovy +++ b/grails-app/controllers/rgms/news/NewsController.groovy @@ -1,6 +1,57 @@ package rgms.news +import org.springframework.dao.DataIntegrityViolationException; + class NewsController { def index() { } + + def create = { + def news = new News(params) + [newsInstance: news] + } + + def delete = { + def newsInstance = News.get(params.id) + if (!newsInstance) { + flash.message = message(code: 'default.not.found.message', args: [message(code: 'news.label', default: 'News'), params.id]) + redirect(action: "list") + return + } + + try { + newsInstance.delete(flush: true) + flash.message = message(code: 'default.deleted.message', args: [message(code: 'news.label', default: 'News'), params.id]) + redirect(action: "list") + } + catch (DataIntegrityViolationException e) { + flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'news.label', default: 'News'), params.id]) + redirect(action: "show", id: params.id) + } + } + + def save = { + if (!grailsApplication.config.grails.mail.username) { + throw new RuntimeException(message(code: 'mail.plugin.not.configured', 'default' : 'Mail plugin not configured')) + } + + def newsInstance = new News(params) + def newsDB = News.findAllByDescriptionAndDate(newsInstance.description,newsInstance.date); + if(!newsDB?.empty) + { + flash.message = message(code: 'news.not.created.unicity.rule.message', args: [message(code: 'news.label', default: 'News'), params.id]) + redirect(action: "show", id: params.id) + return + + } + //verificar unicidade aqui + //flash.message + + if (!newsInstance.save(flush: true)) { + render(view: "create", model: [newsInstance: newsInstance]) + return + } + } } + + diff --git a/grails-app/domain/rgms/member/ResearchGroup.groovy b/grails-app/domain/rgms/member/ResearchGroup.groovy index 087d46e8..074b6415 100644 --- a/grails-app/domain/rgms/member/ResearchGroup.groovy +++ b/grails-app/domain/rgms/member/ResearchGroup.groovy @@ -1,14 +1,17 @@ package rgms.member -import rgms.publication.Publication; +import rgms.news.News +import rgms.publication.Publication class ResearchGroup { String name String description + String twitter + //#if($researchGroupHierarchy) ResearchGroup childOf; //#end - static hasMany = [memberships : Membership] + static hasMany = [memberships : Membership, news : News] public String toString() { @@ -17,6 +20,7 @@ class ResearchGroup { static constraints = { name(maxSize:10,blank:false,unique:true) description(maxSize:1000,blank:false) + twitter(nullable:true) //#if($researchGroupHierarchy) childOf(nullable:true) diff --git a/grails-app/domain/rgms/news/News.groovy b/grails-app/domain/rgms/news/News.groovy index 0cf0b54d..95938b48 100644 --- a/grails-app/domain/rgms/news/News.groovy +++ b/grails-app/domain/rgms/news/News.groovy @@ -1,13 +1,16 @@ package rgms.news +import rgms.member.ResearchGroup; + class News { String description - Date date + Date date + ResearchGroup researchGroup static constraints = { - description blank:false - date blank:false + description(blank:false) + date(blank:false) } diff --git a/grails-app/i18n/messages.properties b/grails-app/i18n/messages.properties index db3486f3..cf6f57fb 100644 --- a/grails-app/i18n/messages.properties +++ b/grails-app/i18n/messages.properties @@ -1,3 +1,4 @@ +<<<<<<< HEAD default.doesnt.match.message=Property [{0}] of class [{1}] with value [{2}] does not match the required pattern [{3}] default.invalid.url.message=Property [{0}] of class [{1}] with value [{2}] is not a valid URL default.invalid.creditCard.message=Property [{0}] of class [{1}] with value [{2}] is not a valid credit card number @@ -143,3 +144,7 @@ default.xml.structure.message=The XML struct doesn't comply with Lattes default.xml.unknownerror.message=An unknown error occurred. Contact the administrator file.already.exist.message=A file has already been saved with the same name + +#if($news) +news.not.created.unicity.rule.message=The system has a news with this description and date. +#end diff --git a/test/cucumber/News.feature b/test/cucumber/News.feature index 91961a8a..23e0dae8 100644 --- a/test/cucumber/News.feature +++ b/test/cucumber/News.feature @@ -5,26 +5,25 @@ Feature: news Jointly this I want too integrate an twitter account to publish news into RGMS system. Scenario: new news - Given the system has no news with description "noticia1teste" and date "07/04/2013" - When I create a news with description "noticia1teste" and date "07/04/2013" - Then the news with description "noticia1teste" and date "07/04/2013" is properly stored by the system + Given the system has no news with description "noticia1teste" and date "07-04-2013" + When I create a news with description "noticia1teste" and date "07-04-2013" + Then the news with description "noticia1teste" and date "07-04-2013" is properly stored by the system - Scenario: delete news - Given the system has a news with description "noticia1teste" and date "07/04/2013" - When I delete a news with description "noticia1teste" and date "07/04/2013" - Then the news with "noticia1teste" and date "07/04/2013" doesnt exists - - Scenario: new news with existing - Given the system has a news with description "noticia1teste" and date "07/04/2013" - When I create a news with description "noticia1teste" and date "07/04/2013" - Then the news with "noticia1teste" and date "07/04/2013" is not registered - - Scenario: integrate Twitter account - Given the research group "RGTST" in the system has no Twitter account associated - When I associate the account "testtt@teste.com" to "RGTST" group - Then the news of "RGTST" research group can be retrieved by a Twitter post of "testtt@teste.com" - - -/***** - *** especificar a forma de atualização de noticia, via job, via ação no menu... - *****/ \ No newline at end of file + Scenario: delete news + Given the system has a news with description "noticia1teste" and date "07-04-2013" + When I delete a news with description "noticia1teste" and date "07-04-2013" + Then the news with "noticia1teste" and date "07-04-2013" doesnt exists + + Scenario: new news with existing + Given the system has a news with description "noticia1teste" and date "07-04-2013" + When I create a news with description "noticia1teste" and date "07-04-2013" + Then the news with "noticia1teste" and date "07-04-2013" is not registered + Scenario: insert Twitter account + Given the research group "taes" in the system has no Twitter account associated + When I associate the account "olhardigital" to "taes" group + Then "taes" research group has a twitter account "olhardigital" registred + @ignore + Scenario: retrive Twitter timeline + Given the research group "RGTST" in the system has Twitter account "olhardigital" associated + When I request to update the news from Twitter "olhardigital" + Then news of "RGTST" research group has been updated \ No newline at end of file diff --git a/test/cucumber/steps/NewsSteps.groovy b/test/cucumber/steps/NewsSteps.groovy index 211332cb..eff369d9 100644 --- a/test/cucumber/steps/NewsSteps.groovy +++ b/test/cucumber/steps/NewsSteps.groovy @@ -1,59 +1,78 @@ -import java.lang.reflect.Member; import rgms.member.ResearchGroup; +import rgms.news.News; +import steps.TestDataAndOperations +import static cucumber.api.groovy.EN.* -Given(~'^the system has no news with description "([^"]*)" and date "([^"]*)"$') { String description, @Format("dd/MM/yyyy") Date date -> - news = News.findByDescriptionAndDate(description, date); +Given(~'^the system has no news with description "([^"]*)" and date "([^"]*)"$') { String description, String date -> + Date dateAsDateObj = Date.parse("dd-MM-yyyy",date) + news = News.findByDescriptionAndDate(description, dateAsDateObj); assert news == null } -When(~'^I create a news with description "([^"]*)" and date "([^"]*)"$') { String description, @Format("dd/MM/yyyy") Date date -> - TestDataAndOperations.createNews(description,date) +When(~'^I create a news with description "([^"]*)" and date "([^"]*)"$') { String description, String date -> + Date dateAsDateObj = Date.parse("dd-MM-yyyy",date) + TestDataAndOperations.createNews(description,dateAsDateObj) } -Then(~'^the news with description "([^"]*)" and date "([^"]*)" is properly stored by the system$') { String description, @Format("dd/MM/yyyy") Date date -> - news = News.findByDescriptionAndDate(description, date); +Then(~'^the news with description "([^"]*)" and date "([^"]*)" is properly stored by the system$') { String description, String date -> + Date dateAsDateObj = Date.parse("dd-MM-yyyy",date) + news = News.findByDescriptionAndDate(description, dateAsDateObj); assert news != null } -Given(~'^the system has a news with description "([^"]*)" and date "([^"]*)"$') { String description, @Format("dd/MM/yyyy") Date date -> - TestDataAndOperations.createNews(description,date) - news = News.findByDescriptionAndDate(description, date); +Given(~'^the system has a news with description "([^"]*)" and date "([^"]*)"$') { String description, String date -> + Date dateAsDateObj = Date.parse("dd-MM-yyyy",date) + TestDataAndOperations.createNews(description,dateAsDateObj) + news = News.findByDescriptionAndDate(description, dateAsDateObj); assert news != null } -When(~'^I delete a news with description "([^"]*)" and date "([^"]*)"$') { String description, @Format("dd/MM/yyyy") Date date -> - TestDataAndOperations.deleteNews(description,date); +When(~'^I delete a news with description "([^"]*)" and date "([^"]*)"$') { String description, String date -> + Date dateAsDateObj = Date.parse("dd-MM-yyyy",date) + TestDataAndOperations.deleteNews(description,dateAsDateObj); } -Then(~'^the news with "([^"]*)" and date "([^"]*)" doesnt exists$') { String description, @Format("dd/MM/yyyy") Date date -> - news = News.findByDescriptionAndDate(description, date); - assert news = null +Then(~'^the news with "([^"]*)" and date "([^"]*)" doesnt exists$') { String description, String date -> + Date dateAsDateObj = Date.parse("dd-MM-yyyy",date) + news = News.findByDescriptionAndDate(description, dateAsDateObj); + assert news == null } -When(~'^I create a news with description "([^"]*)" and date "([^"]*)"$') { String description, @Format("dd/MM/yyyy") Date date -> - TestDataAndOperations.createNews(description,date); +Then(~'^the news with "([^"]*)" and date "([^"]*)" is not registered$') { String description, String date -> + Date dateAsDateObj = Date.parse("dd-MM-yyyy",date) + newsList = News.findAllByDescriptionAndDate(description, dateAsDateObj); + assert newsList.size() == 1 } -Then(~'^the news with "([^"]*)" and date "([^"]*)" is not registered$') { String description, @Format("dd/MM/yyyy") Date date -> - news = News.findByDescriptionAndDate(description, date); - assert news.size() == 1 +Given(~'^the research group "([^"]*)" in the system has no Twitter account associated$') { String groupName -> + TestDataAndOperations.createResearchGroup(groupName) + researchGroup = ResearchGroup.findByName(groupName) + assert researchGroup != null } -Given(~'^the research group "([^"]*)" in the system has no Twitter account associated$') { String groupName -> - researchGroup = TestDataAndOperations.createResearchGroup(groupName); - assert researchGroup.twitterAccount == "" +When(~'^I associate the account "([^"]*)" to "([^"]*)" group$') { String twitter, String groupName -> + researchGroup = ResearchGroup.findByName(groupName) + researchGroup.twitter = twitter + researchGroup.save() + //TestDataAndOperations.editResearchGroupTwitter(researchGroup, twitter) +} + +Then(~'^"([^"]*)" research group has a twitter account "([^"]*)" registred$') { String groupName, String twitter -> + researchGroup = ResearchGroup.findByName(groupName) + assert researchGroup.twitter == twitter +} + +Given(~'^the research group "([^"]*)" in the system has Twitter account "([^"]*)" associated$') { String groupName, String twitter -> + +} + +When(~'^I request to update the news from Twitter "([^"]*)"$') { String twitter -> + // Express the Regexp above with the code you wish you had + //throw new PendingException() } -When(~'^I associate the account "([^"]*)" to "([^"]*)" group$') { String twitterAcount, String groupName -> - researchGroup = ResearchGroup.findResearchGroupByGroupName(groupName) - TestDataAndOperations.editResearchGroupTwitterAccount(researchGroup, twitterAccount) - researchGroup = ResearchGroup.findResearchGroupByGroupName(groupName) - assert researchGroup.twitterAccount == twitterAccount +Then(~'^news of "([^"]*)" research group has been updated$') { String groupName -> + // Express the Regexp above with the code you wish you had + //throw new PendingException() } -Then(~'^the news of "([^"]*)" research group can be retrieved by a Twitter post of "([^"]*)" acount$') { String groupName -> - researchGroup = ResearchGroup.findResearchGroupByGroupName(groupName) - TwitterConnection conn = new TwitterConnection(acount:researchGroup.twitterAcount) - listNews = conn.listNews() - assert listNews != null -} \ No newline at end of file diff --git a/test/functional/steps/TestDataAndOperations.groovy b/test/functional/steps/TestDataAndOperations.groovy index f1554558..ffedf8a2 100644 --- a/test/functional/steps/TestDataAndOperations.groovy +++ b/test/functional/steps/TestDataAndOperations.groovy @@ -25,6 +25,9 @@ import rgms.publication.ConferenciaController import rgms.publication.BookChapter import rgms.publication.BookChapterController +import rgms.news.News; +import rgms.news.NewsController + class TestDataAndOperations { static articles = [ @@ -74,18 +77,23 @@ static reports = [ [name: "Rebeca Souza", username: "rebecasouza", email: "rsa2fake@cin.ufpe.br", status: "Graduate Student", university: "UFPE", enabled: true ]] - static news = [ - [descrition: "Desc1", date: Calendar.getInstance().getTime()], - [descrition: "Desc2", date: Calendar.getInstance().getTime()]] + static researchgroups = [ [name: "SWPRG", description: "SW Productivity Research Group", - childOf: null] + childOf: null, + twitter: null] , [name: "taes", description: "grupo de estudos", - childOf: null]] + childOf: null, + twitter: null] + , + [name: "RGTST", + description: "grupo de estudos", + childOf: null, + twitter: "olhardigital"]] static memberships = [ [member: (new Member(members[0])), @@ -111,13 +119,6 @@ static public def findByUsername(String username) { member.username == username } } -static public def findByDescriptionAndDate(String description, Date date) { - news.find { news -> - news.description == description - news.date == date - } -} - static public def findRecordByStatus(def status) { records.find{ record -> @@ -284,9 +285,9 @@ static public void editResearchGroup(def researchGroup, String newName, String n researchGroupController.response.reset() } -static public void editResearchGroupTwitterAccount(def researchGroup, String newTwitterAccount) { +static public void editResearchGroupTwitter(researchGroup, String newTwitter) { def researchGroupController = new ResearchGroupController() - researchGroupController.params << [twitterAccount: newTwitterAccount] << [id : researchGroup.getId()] + researchGroupController.params << [twitter: newTwitter] << [id : researchGroup.getId()] researchGroupController.edit() researchGroupController.save() researchGroupController.response.reset() @@ -347,11 +348,11 @@ static public void createMember(String username) { } static public void createNews(String descriptionParam, Date dateParam) { - /*def cont = new NewsController() + def cont = new NewsController() cont.params << [description: descriptionParam, date: dateParam] cont.create() cont.save() - cont.response.reset()*/ + cont.response.reset() } @@ -383,7 +384,7 @@ static public TechnicalReport editTech(oldtitle, newtitle) { static public void createResearchGroup(String groupname) { def cont = new ResearchGroupController() cont.params << TestDataAndOperations.findResearchGroupByGroupName(groupname) - cont.request.setContent(new byte[1000]) // Could also vary the request content. + //cont.request.setContent(new byte[1000]) // Could also vary the request content. cont.create() cont.save() cont.response.reset() @@ -427,18 +428,17 @@ static public void deleteMember(String username) { cont.params << [id: identificador] cont.request.setContent(new byte[1000]) // Could also vary the request content. cont.delete() - //cont.save() cont.response.reset() } static public void deleteNews(String description, Date date) { -// def cont = new NewsController() -// def identificador = News.findByDescriptionAndDate(description,date).id -// cont.params << [id: identificador] -// cont.request.setContent(new byte[1000]) // Could also vary the request content. -// cont.delete() -// //cont.save() -// cont.response.reset() + def cont = new NewsController() + def identificador = News.findByDescriptionAndDate(description,date).id + cont.params << [id: identificador] + cont.request.setContent(new byte[1000]) // Could also vary the request content. + cont.delete() + //cont.save() + cont.response.reset() } From 832a271aff05bc91c2568c28751b4a603c8ed6ce Mon Sep 17 00:00:00 2001 From: baff Date: Mon, 22 Apr 2013 17:45:18 -0300 Subject: [PATCH 09/32] Feature news finished --- lib/twitter4j-core-3.0.3.jar | Bin 0 -> 284059 bytes src/java/rgms/news/TwitterConnection.java | 45 ++++++++++++++++++++++ twitter4j.properties | 5 +++ 3 files changed, 50 insertions(+) create mode 100644 lib/twitter4j-core-3.0.3.jar create mode 100644 src/java/rgms/news/TwitterConnection.java create mode 100644 twitter4j.properties diff --git a/lib/twitter4j-core-3.0.3.jar b/lib/twitter4j-core-3.0.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..b9394f43c9e5948d36d0174fcfae0c36781043fb GIT binary patch literal 284059 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

=IbTvgRT?H2Z5l@RrW|emk$X1Q&GfIam1VQ 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 literal 0 HcmV?d00001 diff --git a/src/java/rgms/news/TwitterConnection.java b/src/java/rgms/news/TwitterConnection.java new file mode 100644 index 00000000..42af24eb --- /dev/null +++ b/src/java/rgms/news/TwitterConnection.java @@ -0,0 +1,45 @@ +package rgms.news; + +import java.util.List; + +import com.itextpdf.text.pdf.PdfStructTreeController.returnType; + +import twitter4j.Paging; +import twitter4j.Status; +import twitter4j.Twitter; +import twitter4j.TwitterException; +import twitter4j.TwitterFactory; + +public class TwitterConnection { + + private static Paging pageConfig = new Paging(1, 10); + private static Twitter twitter = new TwitterFactory().getInstance(); + + public boolean canConnect(String user) + { + try + { + twitter.getUserTimeline(user); + return true; + }catch (TwitterException te) + { + return false; + } + + } + + public List getTimeLine(String user) + { + List statusList = null; + try + { + statusList = twitter.getUserTimeline(user,pageConfig); + }catch (TwitterException te) + { + te.printStackTrace(); + System.out.println("Failed to get timeline: " + te.getMessage()); + } + return statusList; + } + +} diff --git a/twitter4j.properties b/twitter4j.properties new file mode 100644 index 00000000..b6f27ef6 --- /dev/null +++ b/twitter4j.properties @@ -0,0 +1,5 @@ +debug=true +oauth.consumerKey=FGGHxJA959Z5UPNYD65g +oauth.consumerSecret=8KnOaqpwCJsR4ZjNIgQKp5GEa1Jug0luOVi1aftoU +oauth.accessToken=54930262-8cXbJnJ611ZtjrJEQapBkVCICzA0NJa2e7pDu7Zl5 +oauth.accessTokenSecret=SDqmSDhz5BUD4z8rSEH4Jd7mnWy8lDmnmhRJmz97Q \ No newline at end of file From 1b9a4c4c993f9a6ce73c8e9b06c69146d624b672 Mon Sep 17 00:00:00 2001 From: baff Date: Mon, 22 Apr 2013 17:49:54 -0300 Subject: [PATCH 10/32] Feature news finished --- .../member/ResearchGroupController.groovy | 44 +++++++---------- .../rgms/news/NewsController.groovy | 8 ++-- grails-app/domain/rgms/news/News.groovy | 13 ++++- grails-app/i18n/messages.properties | 2 +- grails-app/i18n/messages_pt_BR.properties | 4 ++ grails-app/views/researchGroup/_form.gsp | 8 ++++ grails-app/views/researchGroup/show.gsp | 38 +++++++++++++-- test/cucumber/News.feature | 25 +++++----- test/cucumber/steps/NewsSteps.groovy | 48 +++++++++++-------- .../steps/TestDataAndOperations.groovy | 27 +++++++++-- 10 files changed, 146 insertions(+), 71 deletions(-) diff --git a/grails-app/controllers/rgms/member/ResearchGroupController.groovy b/grails-app/controllers/rgms/member/ResearchGroupController.groovy index 4dbe0d52..1f5cbc69 100644 --- a/grails-app/controllers/rgms/member/ResearchGroupController.groovy +++ b/grails-app/controllers/rgms/member/ResearchGroupController.groovy @@ -3,6 +3,11 @@ package rgms.member import org.springframework.dao.DataIntegrityViolationException +import rgms.news.News +import rgms.news.NewsController +import rgms.news.TwitterConnection +import twitter4j.Status + class ResearchGroupController { @@ -23,7 +28,7 @@ class ResearchGroupController { } def save() { - def researchGroupInstance = new ResearchGroup(params) + def researchGroupInstance = new ResearchGroup(params) if (!researchGroupInstance.save(flush: true)) { render(view: "create", model: [researchGroupInstance: researchGroupInstance]) return @@ -40,7 +45,7 @@ class ResearchGroupController { return } //def cm = Membership.getCurrentMemberships(researchGroupInstance) - [researchGroupInstance: researchGroupInstance, publicationsInstance : listPublicationByGroup(), currentMemberships: Membership.getCurrentMemberships(researchGroupInstance)] + [researchGroupInstance: researchGroupInstance, publicationsInstance : listPublicationByGroup(), currentMemberships: Membership.getCurrentMemberships(researchGroupInstance), currentNews: News.getCurrentNews(researchGroupInstance)] } def edit() { @@ -165,28 +170,15 @@ class ResearchGroupController { return list } -// def Set listPublicationByGroup(){ -// def researchGroupInstance = ResearchGroup.get(params.id) -// //def g = rgms.ResearchGroup.findById(researchGroupInstance.id) -// def l = [] as Set -// def memberships = researchGroupInstance.memberships.findAll{ -// researchGroupInstance.id = it.researchGroup.id -// } -// -// memberships.each{ -// -// def dateJoined = it.dateJoined -// for(publication in it.member.publications) -// { -// -// if( publication.publicationDate.compareTo(it.dateJoined) > 0) -// { -// l.add(publication); -// } -// } -// } -// return l -// -// } - + + def updateNewsFromTwitter(){ + def researchGroupInstance = ResearchGroup.get(params.id) + TwitterConnection twConn = new TwitterConnection() + List timeline = twConn.getTimeLine(researchGroupInstance.twitter) + timeline.each { + researchGroupInstance.addToNews(new News(description: it.getText(), date: it.getCreatedAt())) + } + researchGroupInstance.save() + redirect(action: "show", id: researchGroupInstance.id) + } } diff --git a/grails-app/controllers/rgms/news/NewsController.groovy b/grails-app/controllers/rgms/news/NewsController.groovy index 249132f9..61a3e4c9 100644 --- a/grails-app/controllers/rgms/news/NewsController.groovy +++ b/grails-app/controllers/rgms/news/NewsController.groovy @@ -2,6 +2,8 @@ package rgms.news import org.springframework.dao.DataIntegrityViolationException; +import twitter4j.Status; + class NewsController { def index() { } @@ -36,8 +38,8 @@ class NewsController { } def newsInstance = new News(params) - def newsDB = News.findAllByDescriptionAndDate(newsInstance.description,newsInstance.date); - if(!newsDB?.empty) + def newsDB = News.findByDescriptionAndDateAndResearchGroup(newsInstance.description,newsInstance.date,newsInstance.researchGroup); + if(newsDB) { flash.message = message(code: 'news.not.created.unicity.rule.message', args: [message(code: 'news.label', default: 'News'), params.id]) redirect(action: "show", id: params.id) @@ -51,7 +53,7 @@ class NewsController { render(view: "create", model: [newsInstance: newsInstance]) return } - } + } } diff --git a/grails-app/domain/rgms/news/News.groovy b/grails-app/domain/rgms/news/News.groovy index 95938b48..b5f0612e 100644 --- a/grails-app/domain/rgms/news/News.groovy +++ b/grails-app/domain/rgms/news/News.groovy @@ -1,17 +1,26 @@ package rgms.news +import java.util.List; + import rgms.member.ResearchGroup; class News { String description Date date - ResearchGroup researchGroup + + static belongsTo = [researchGroup:ResearchGroup] static constraints = { description(blank:false) - date(blank:false) + date(blank:false) + researchGroup nullable:false } + static List getCurrentNews(researchGroup){ + def list = News.findAllByResearchGroup(researchGroup) + return list + } + } diff --git a/grails-app/i18n/messages.properties b/grails-app/i18n/messages.properties index cf6f57fb..2b0a58c6 100644 --- a/grails-app/i18n/messages.properties +++ b/grails-app/i18n/messages.properties @@ -1,4 +1,3 @@ -<<<<<<< HEAD default.doesnt.match.message=Property [{0}] of class [{1}] with value [{2}] does not match the required pattern [{3}] default.invalid.url.message=Property [{0}] of class [{1}] with value [{2}] is not a valid URL default.invalid.creditCard.message=Property [{0}] of class [{1}] with value [{2}] is not a valid credit card number @@ -147,4 +146,5 @@ file.already.exist.message=A file has already been saved with the same name #if($news) news.not.created.unicity.rule.message=The system has a news with this description and date. +default.button.update.twitter.label=Update News from Twitter #end diff --git a/grails-app/i18n/messages_pt_BR.properties b/grails-app/i18n/messages_pt_BR.properties index 0b1ca2cf..f8b06f88 100644 --- a/grails-app/i18n/messages_pt_BR.properties +++ b/grails-app/i18n/messages_pt_BR.properties @@ -138,4 +138,8 @@ tese.month.label=Mês tese.arquivo.label=Arquivo tese.label=Tese #end + +#if($news) +news.not.created.unicity.rule.message=Já existe no sistema uma noticia cadastrada o esta descrição de data para este grupo de pesquisa. +default.button.update.twitter.label=Atualizar noticias do twitter #end \ No newline at end of file diff --git a/grails-app/views/researchGroup/_form.gsp b/grails-app/views/researchGroup/_form.gsp index b107cada..4f8d0a88 100644 --- a/grails-app/views/researchGroup/_form.gsp +++ b/grails-app/views/researchGroup/_form.gsp @@ -12,6 +12,14 @@ +

+
diff --git a/test/cucumber/News.feature b/test/cucumber/News.feature index f82d5c94..c78aa4b0 100644 --- a/test/cucumber/News.feature +++ b/test/cucumber/News.feature @@ -5,26 +5,21 @@ Feature: news Jointly this I want too integrate an twitter account to publish news into RGMS system. Scenario: new news - Given the system has no news with description "noticia1teste" and date "07-04-2013" for "taes" research group - When I create a news with description "noticia1teste" and date "07-04-2013" for "taes" research group - Then the news with description "noticia1teste", date "07-04-2013" and "taes" research group is properly stored by the system - - Scenario: delete news - Given the system has a news with description "noticia1teste" and date "07-04-2013" for "taes" research group - When I delete a news with description "noticia1teste" and date "07-04-2013" of "taes" research group - Then the news with "noticia1teste" and date "07-04-2013" doesnt exists to "taes" research group - - Scenario: new news with existing - Given the system has a news with description "noticia1teste" and date "07-04-2013" for "taes" research group - When I create a news with description "noticia1teste" and date "07-04-2013" for "taes" research group - Then the news with "noticia1teste" and date "07-04-2013" is not registered to "taes" research group + Given the system has no news with description "noticia1teste" + When I create a news with description "noticia1teste" + Then the news with description "noticia1teste" is properly stored by the system - Scenario: insert Twitter account - Given the research group "taes" in the system has no Twitter account associated - When I associate the account "olhardigital" to "taes" group - Then "taes" research group has a twitter account "olhardigital" registred - - Scenario: retrive Twitter timeline - Given the research group "RGTST" in the system has Twitter account "olhardigital" associated - When I request to update the news from Twitter "olhardigital" - Then news of "RGTST" research group has been updated \ No newline at end of file + Scenario: delete news + Given the system has a news with description "noticia1teste" + When I delete a news with description "noticia1teste" + Then the news with "noticia1teste" doesnt exists + + Scenario: new news with existing + Given the system has a news with description "noticia1teste" + When I create a news with description "noticia1teste" + Then the news with "noticia1teste" is not registered + + Scenario: integrate Twitter account + Given the research group in the system has no Twitter account "testtt@teste.com" associated + When I associate the account "testtt@teste.com" + Then the news can be retrieved by a Twitter post with "testtt@teste.com" diff --git a/test/cucumber/steps/NewsSteps.groovy b/test/cucumber/steps/NewsSteps.groovy index 5f2fb1a1..cd323cfa 100644 --- a/test/cucumber/steps/NewsSteps.groovy +++ b/test/cucumber/steps/NewsSteps.groovy @@ -83,4 +83,3 @@ Then(~'^news of "([^"]*)" research group has been updated$') { String groupName researchGroup = ResearchGroup.findByName(groupName) assert researchGroup.news.size() == 10 } - diff --git a/web-app/css/errors.css b/web-app/css/errors.css index e7ec556e..083cca73 100644 --- a/web-app/css/errors.css +++ b/web-app/css/errors.css @@ -1,5 +1,5 @@ h1, h2 { - margin: 10px 25px 5px; + margin: 10px 25px 5px; } h2 { From 744e823f47064f70c7efbaed96a941256bf5a212 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diogo=20Vin=C3=ADcius?= Date: Mon, 8 Apr 2013 19:36:50 -0300 Subject: [PATCH 12/32] =?UTF-8?q?Features=20e=20cen=C3=A1rios=20para=20not?= =?UTF-8?q?=C3=ADcias=20e=20importa=C3=A7=C3=A3o=20de=20arquivos=20bibtex.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/cucumber/BibtexImport.feature | 24 ++++++++ test/cucumber/steps/BibtexImportSteps.groovy | 59 ++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 test/cucumber/BibtexImport.feature create mode 100644 test/cucumber/steps/BibtexImportSteps.groovy diff --git a/test/cucumber/BibtexImport.feature b/test/cucumber/BibtexImport.feature new file mode 100644 index 00000000..d6cb0fdd --- /dev/null +++ b/test/cucumber/BibtexImport.feature @@ -0,0 +1,24 @@ +@i9n +Feature: BibtexImport + As a member of a research group + I want to import a bibtex file + So that the system register yours corresponding publications + + Scenario: import bibtex + Given the bibtex file + When I try to upload the bibtex file + Then is created all corresponding publications + And all of then are stored + + Scenario: bibtex file unformatted + Given the file bibtex unformatted + When I try to upload the bibtex file unformatted + Then the system output the message error "bibtex file unformatted" + And the file is not accepted* + + Scenario: bibtex file with several publication types + Given the bibtex file with one Book Chapter and two Technical Report + When I try to upload the bibtex file + Then is created one Book Chapter publication + And is created two Technical Report publications + And all of then are stored* \ No newline at end of file diff --git a/test/cucumber/steps/BibtexImportSteps.groovy b/test/cucumber/steps/BibtexImportSteps.groovy new file mode 100644 index 00000000..af0c6e74 --- /dev/null +++ b/test/cucumber/steps/BibtexImportSteps.groovy @@ -0,0 +1,59 @@ +import cucumber.runtime.PendingException; +import static cucumber.api.groovy.EN.* + +//You can implement missing steps with the snippets below: + +Given(~'^the bibtex file$') { -> + // Express the Regexp above with the code you wish you had + throw new PendingException() +} + +When(~'^I try to upload the bibtex file$') { -> + // Express the Regexp above with the code you wish you had + throw new PendingException() +} + +Then(~'^is created all corresponding publications$') { -> + // Express the Regexp above with the code you wish you had + throw new PendingException() +} + +Then(~'^all of then are stored$') { -> + // Express the Regexp above with the code you wish you had + throw new PendingException() +} + +Given(~'^the file bibtex unformatted$') { -> + // Express the Regexp above with the code you wish you had + throw new PendingException() +} + +When(~'^I try to upload the bibtex file unformatted$') { -> + // Express the Regexp above with the code you wish you had + throw new PendingException() +} + +Then(~'^the system output the message error "([^"]*)"$') { String arg1 -> + // Express the Regexp above with the code you wish you had + throw new PendingException() +} + +Then(~'^the file is not accepted$') { -> + // Express the Regexp above with the code you wish you had + throw new PendingException() +} + +Given(~'^the bibtex file with one Book Chapter and two Technical Report$') { -> + // Express the Regexp above with the code you wish you had + throw new PendingException() +} + +Then(~'^is created one Book Chapter publication$') { -> + // Express the Regexp above with the code you wish you had + throw new PendingException() +} + +Then(~'^is created two Technical Report publications$') { -> + // Express the Regexp above with the code you wish you had + throw new PendingException() +} \ No newline at end of file From 589fec29cf6423db0095afbceacafe54e848883d Mon Sep 17 00:00:00 2001 From: diogovss Date: Tue, 9 Apr 2013 11:42:24 -0300 Subject: [PATCH 13/32] =?UTF-8?q?Corre=C3=A7=C3=A3o=20da=20feature?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/cucumber/BibtexImport.feature | 21 ++++++++------- test/cucumber/steps/BibtexImportSteps.groovy | 27 +++++++++++++------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/test/cucumber/BibtexImport.feature b/test/cucumber/BibtexImport.feature index d6cb0fdd..d9cfe7e1 100644 --- a/test/cucumber/BibtexImport.feature +++ b/test/cucumber/BibtexImport.feature @@ -4,21 +4,24 @@ Feature: BibtexImport I want to import a bibtex file So that the system register yours corresponding publications - Scenario: import bibtex - Given the bibtex file - When I try to upload the bibtex file + Scenario: simple import bibtex + Given I am on Import Bibtex File Menu + When I click "Choose file" + And selected a bibtex file and I click "Import" Then is created all corresponding publications And all of then are stored Scenario: bibtex file unformatted - Given the file bibtex unformatted - When I try to upload the bibtex file unformatted + Given I am on Import Bibtex File Menu + When I click "Choose file" + And selected a bibtex file unformatted and I click "Import" Then the system output the message error "bibtex file unformatted" - And the file is not accepted* + And none publication is stored Scenario: bibtex file with several publication types - Given the bibtex file with one Book Chapter and two Technical Report - When I try to upload the bibtex file + Given I am on Import Bibtex File Menu + When I click "Choose file" + And selected a bibtex file with one Book Chapter and two Technical Report and I click "Import" Then is created one Book Chapter publication And is created two Technical Report publications - And all of then are stored* \ No newline at end of file + And one Book Chapter is stored and two Technical Report is stored \ No newline at end of file diff --git a/test/cucumber/steps/BibtexImportSteps.groovy b/test/cucumber/steps/BibtexImportSteps.groovy index af0c6e74..68155516 100644 --- a/test/cucumber/steps/BibtexImportSteps.groovy +++ b/test/cucumber/steps/BibtexImportSteps.groovy @@ -2,33 +2,32 @@ import cucumber.runtime.PendingException; import static cucumber.api.groovy.EN.* //You can implement missing steps with the snippets below: - -Given(~'^the bibtex file$') { -> +Given(~'^I am on Import Bibtex File Menu$') { -> // Express the Regexp above with the code you wish you had throw new PendingException() } -When(~'^I try to upload the bibtex file$') { -> +When(~'^I click "([^"]*)"$') { String arg1 -> // Express the Regexp above with the code you wish you had throw new PendingException() } -Then(~'^is created all corresponding publications$') { -> +When(~'^selected a bibtex file and I click "([^"]*)"$') { String arg1 -> // Express the Regexp above with the code you wish you had throw new PendingException() } -Then(~'^all of then are stored$') { -> +Then(~'^is created all corresponding publications$') { -> // Express the Regexp above with the code you wish you had throw new PendingException() } -Given(~'^the file bibtex unformatted$') { -> +Then(~'^all of then are stored$') { -> // Express the Regexp above with the code you wish you had throw new PendingException() } -When(~'^I try to upload the bibtex file unformatted$') { -> +When(~'^selected a bibtex file unformatted and I click "([^"]*)"$') { String arg1 -> // Express the Regexp above with the code you wish you had throw new PendingException() } @@ -38,12 +37,12 @@ Then(~'^the system output the message error "([^"]*)"$') { String arg1 -> throw new PendingException() } -Then(~'^the file is not accepted$') { -> +Then(~'^none publication is stored$') { -> // Express the Regexp above with the code you wish you had throw new PendingException() } -Given(~'^the bibtex file with one Book Chapter and two Technical Report$') { -> +When(~'^selected a bibtex file with one Book Chapter and two Technical Report and I click "([^"]*)"$') { String arg1 -> // Express the Regexp above with the code you wish you had throw new PendingException() } @@ -56,4 +55,14 @@ Then(~'^is created one Book Chapter publication$') { -> Then(~'^is created two Technical Report publications$') { -> // Express the Regexp above with the code you wish you had throw new PendingException() +} + +Then(~'^one Book Chapter is stored and two Technical Report is stored$') { -> + // Express the Regexp above with the code you wish you had + throw new PendingException() +} + +When(~'^I click on "([^"]*)" option at Technical Report list$') { String arg1 -> + // Express the Regexp above with the code you wish you had + throw new PendingException() } \ No newline at end of file From 95bbfa305f699246e1eadbf9ae476e7a6508142d Mon Sep 17 00:00:00 2001 From: diogovss Date: Tue, 23 Apr 2013 02:12:04 -0300 Subject: [PATCH 14/32] =?UTF-8?q?Finaliza=C3=A7=C3=A3o=20da=20funcionalida?= =?UTF-8?q?de=20Importa=C3=A7=C3=A3o=20de=20arquivos=20Bibtex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- grails-app/conf/BuildConfig.groovy | 1 + grails-app/conf/UrlMappings.groovy | 5 + .../publication/BibtexFileController.groovy | 51 ++++++++ .../domain/rgms/publication/BibtexFile.groovy | 54 ++++++++ .../rgms/publication/BibtexParse.groovy | 116 ++++++++++++++++++ grails-app/views/bibtexFile/home.gsp | 17 +++ grails-app/views/initial.gsp | 1 + grails-app/views/tese/list.gsp | 4 +- lib/jbibtex-1.0.3.jar | Bin 0 -> 75280 bytes test/cucumber/BibtexImport.feature | 8 +- test/cucumber/steps/BibtexImportSteps.groovy | 51 ++++---- test/cucumber/steps/sample.bibtex | 26 ++++ 12 files changed, 298 insertions(+), 36 deletions(-) create mode 100644 grails-app/controllers/rgms/publication/BibtexFileController.groovy create mode 100644 grails-app/domain/rgms/publication/BibtexFile.groovy create mode 100644 grails-app/domain/rgms/publication/BibtexParse.groovy create mode 100644 grails-app/views/bibtexFile/home.gsp create mode 100644 lib/jbibtex-1.0.3.jar create mode 100644 test/cucumber/steps/sample.bibtex diff --git a/grails-app/conf/BuildConfig.groovy b/grails-app/conf/BuildConfig.groovy index 3a621b0d..0a5cba9b 100644 --- a/grails-app/conf/BuildConfig.groovy +++ b/grails-app/conf/BuildConfig.groovy @@ -45,6 +45,7 @@ grails.project.dependency.resolution = { compile('lib:itextpdf:5.4.0') compile('lib:itext-pdfa:5.4.0') compile('lib:itext-xtra:5.4.0') + compile('lib:jbibtex:1.0.3') // runtime 'mysql:mysql-connector-java:5.1.16' } diff --git a/grails-app/conf/UrlMappings.groovy b/grails-app/conf/UrlMappings.groovy index 16428130..f4a209e1 100644 --- a/grails-app/conf/UrlMappings.groovy +++ b/grails-app/conf/UrlMappings.groovy @@ -7,6 +7,11 @@ class UrlMappings { } } + "/bibtexFileController/upload" { + controller = "bibtexFile" + action = "upload" + } + "/"(controller: "Auth", action: "index") "500"(view:'/error') } diff --git a/grails-app/controllers/rgms/publication/BibtexFileController.groovy b/grails-app/controllers/rgms/publication/BibtexFileController.groovy new file mode 100644 index 00000000..436cc282 --- /dev/null +++ b/grails-app/controllers/rgms/publication/BibtexFileController.groovy @@ -0,0 +1,51 @@ +package rgms.publication + +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.multipart.commons.CommonsMultipartFile; + +/** + * + * @author Diogo Vinícius + * + */ +class BibtexFileController { + + def index() {} + + def upload () { + MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest )request + CommonsMultipartFile cmf = (CommonsMultipartFile)multiRequest.getFile("file") + byte[] bytes = cmf.bytes + File file = new File("web-app//uploads//temp.bibtex") + BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)) + bos.write(bytes) + bos.close() + + System.out.println("********** " + file.getBytes().size()); + + BibtexFile bibtexFile = transform(file) + + System.out.println("********** " + bibtexFile.getPublications().size()) + for (Publication publication : bibtexFile.getPublications()) { + System.out.println("************* " + publication); + System.out.println("************************** School : " + publication.getSchool()); + System.out.println("************************** Address: " + publication.getAddress()); + System.out.println("************************** Title : " + publication.getTitle()); + System.out.println("************************** Date : " + publication.getPublicationDate()); + if (publication.save(failOnError: true)) { + System.out.println("salvando o objeto"); + } + } + redirect(action: "home") + + } + + def home () { + + } + + def BibtexFile transform(file) { + return new BibtexFile(file) + } + +} diff --git a/grails-app/domain/rgms/publication/BibtexFile.groovy b/grails-app/domain/rgms/publication/BibtexFile.groovy new file mode 100644 index 00000000..b27c7680 --- /dev/null +++ b/grails-app/domain/rgms/publication/BibtexFile.groovy @@ -0,0 +1,54 @@ +package rgms.publication + +import java.util.Collection; + +import java.io.BufferedReader +import java.io.File; +import java.io.FileInputStream +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStreamReader +import java.io.Reader; +import java.util.ArrayList +import java.util.List + +import org.jbibtex.BibTeXEntry; +import org.jbibtex.Value; +import org.jbibtex.BibTeXDatabase; +import org.jbibtex.BibTeXEntry; +import org.jbibtex.BibTeXParser; +import org.jbibtex.BibTeXString; +import org.jbibtex.Key; +import org.jbibtex.ParseException; + +import rgms.member.Member + +/** + * + * @author Diogo Vinícius + * + */ +class BibtexFile { + + List publications = new ArrayList() + Member member + + public BibtexFile(file) { + publications = BibtexParse.generatePublications(file) + } + + public List getPublications() { + return this.publications + } + + public List getPublications(Class clazz) { + List publicationsFiltered = new ArrayList() + for (Publication publication : this.getPublications()) { + if (publication.getClass().getName().equals(clazz.getName())) { + publicationsFiltered.add(publication) + } + } + return publicationsFiltered + } + +} diff --git a/grails-app/domain/rgms/publication/BibtexParse.groovy b/grails-app/domain/rgms/publication/BibtexParse.groovy new file mode 100644 index 00000000..59e61fc7 --- /dev/null +++ b/grails-app/domain/rgms/publication/BibtexParse.groovy @@ -0,0 +1,116 @@ +package rgms.publication + +import org.jbibtex.BibTeXDatabase +import org.jbibtex.BibTeXEntry; +import org.jbibtex.BibTeXParser +import org.jbibtex.BibTeXString +import org.jbibtex.Key +import org.jbibtex.ParseException +import org.jbibtex.Value + +/** + * + * @author Diogo Vinícius + * + */ +class BibtexParse { + + public static List generatePublications(File file) { + List publications = new ArrayList() + BibTeXDatabase bibtexDatabase = parseBibTeX(file) + Collection entries = bibtexDatabase.getEntries().values(); + + for(BibTeXEntry entry : entries){ + //TODO settar todos os atributos de acordo com a classe a ser instanciada + //Para pegar os valores do objeto 'entry' basta seguir o modelo da linha abaixo + //String value = entry.getField(BibTeXEntry.KEY_TITLE).toUserString(); + if (entry.getType().equals(BibTeXEntry.TYPE_ARTICLE)) { + + } + else if (entry.getType().equals(BibTeXEntry.TYPE_BOOK)) { + publications.add(new BookChapter()) + } + else if (entry.getType().equals(BibTeXEntry.TYPE_BOOKLET)) { + + } + else if (entry.getType().equals(BibTeXEntry.TYPE_CONFERENCE)) { + publications.add(new Conferencia()) + } + else if (entry.getType().equals(BibTeXEntry.TYPE_INBOOK)) { + + } + else if (entry.getType().equals(BibTeXEntry.TYPE_INCOLLECTION)) { + + } + else if (entry.getType().equals(BibTeXEntry.TYPE_INPROCEEDINGS)) { + + } + else if (entry.getType().equals(BibTeXEntry.TYPE_MANUAL)) { + + } + else if (entry.getType().equals(BibTeXEntry.TYPE_MASTERSTHESIS)) { + Dissertacao dissertacao = new Dissertacao() + dissertacao.setTitle(entry.getField(BibTeXEntry.KEY_TITLE).toUserString()) + dissertacao.setSchool(entry.getField(BibTeXEntry.KEY_SCHOOL).toUserString()) + dissertacao.setAddress(entry.getField(BibTeXEntry.KEY_ADDRESS).toUserString()) + dissertacao.setPublicationDate(new Date())//TODO transformar o date para setar no objeto + dissertacao.setFile("file")//TODO tirar a obrigatoriedade. futuramente processar a url para importar + publications.add(dissertacao) + } + else if (entry.getType().equals(BibTeXEntry.TYPE_MISC)) { + + } + else if (entry.getType().equals(BibTeXEntry.TYPE_PHDTHESIS)) { + Tese tese = new Tese() + tese.setTitle(entry.getField(BibTeXEntry.KEY_TITLE).toUserString()) + tese.setSchool(entry.getField(BibTeXEntry.KEY_SCHOOL).toUserString()) + tese.setAddress(entry.getField(BibTeXEntry.KEY_ADDRESS).toUserString()) + tese.setPublicationDate(new Date())//TODO transformar o date para setar no objeto + tese.setFile("file")//TODO settar corretamente este atributo + publications.add(tese) + } + else if (entry.getType().equals(BibTeXEntry.TYPE_PROCEEDINGS)) { + + } + else if (entry.getType().equals(BibTeXEntry.TYPE_TECHREPORT)) { + publications.add(new TechnicalReport()) + } + else if (entry.getType().equals(BibTeXEntry.TYPE_UNPUBLISHED)) { + + } + + } + + return publications + + } + + private static BibTeXDatabase parseBibTeX(File file) throws IOException, ParseException { + Reader reader = new FileReader(file); + + try { + BibTeXParser parser = new BibTeXParser(){ + + @Override + public void checkStringResolution(Key key, BibTeXString string){ + + if(string == null){ + System.err.println("Unresolved string: \"" + key.getValue() + "\""); + } + } + + @Override + public void checkCrossReferenceResolution(Key key, BibTeXEntry entry){ + + if(entry == null){ + System.err.println("Unresolved cross-reference: \"" + key.getValue() + "\""); + } + } + }; + + return parser.parse(reader); + } finally { + reader.close(); + } +} +} diff --git a/grails-app/views/bibtexFile/home.gsp b/grails-app/views/bibtexFile/home.gsp new file mode 100644 index 00000000..0e768874 --- /dev/null +++ b/grails-app/views/bibtexFile/home.gsp @@ -0,0 +1,17 @@ +<%@ page contentType="text/html;charset=UTF-8" %> + + + + +Insert title here + + +
+
+ + + + +
+ + \ No newline at end of file diff --git a/grails-app/views/initial.gsp b/grails-app/views/initial.gsp index 88654470..44c2eda6 100644 --- a/grails-app/views/initial.gsp +++ b/grails-app/views/initial.gsp @@ -145,6 +145,7 @@
  • Technical Report
  • Tese
  • Orientation
  • +
  • Import Bibtex File
  • diff --git a/grails-app/views/tese/list.gsp b/grails-app/views/tese/list.gsp index 59c4ec5d..cc621df6 100644 --- a/grails-app/views/tese/list.gsp +++ b/grails-app/views/tese/list.gsp @@ -32,7 +32,7 @@ - + <%-- g:sortableColumn property="bibTex" title="${message(code: 'tese.bibTex.label', default: 'Bib Tex')}" / --%> @@ -50,7 +50,7 @@ ${fieldValue(bean: teseInstance, field: "researchLine")} - ${fieldValue(bean: teseInstance, field: "bibTex")} + <%-- td>${fieldValue(bean: teseInstance, field: "bibTex")} ${fieldValue(bean: teseInstance, field: "school")} diff --git a/lib/jbibtex-1.0.3.jar b/lib/jbibtex-1.0.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..6b47eeacaba0f0de77cb7b028f38c3367051f042 GIT binary patch literal 75280 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 z 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 MVE65`1v7{DKg4ZCO8@`> literal 0 HcmV?d00001 diff --git a/test/cucumber/BibtexImport.feature b/test/cucumber/BibtexImport.feature index d9cfe7e1..ca9a8498 100644 --- a/test/cucumber/BibtexImport.feature +++ b/test/cucumber/BibtexImport.feature @@ -21,7 +21,7 @@ Feature: BibtexImport Scenario: bibtex file with several publication types Given I am on Import Bibtex File Menu When I click "Choose file" - And selected a bibtex file with one Book Chapter and two Technical Report and I click "Import" - Then is created one Book Chapter publication - And is created two Technical Report publications - And one Book Chapter is stored and two Technical Report is stored \ No newline at end of file + And selected a bibtex file with one Dissertacao and two Tese and I click "Import" + Then is created one Dissertacao publication + And is created two Tese publications + And one Dissertacao is stored and two Tese is stored \ No newline at end of file diff --git a/test/cucumber/steps/BibtexImportSteps.groovy b/test/cucumber/steps/BibtexImportSteps.groovy index 68155516..1b3fe916 100644 --- a/test/cucumber/steps/BibtexImportSteps.groovy +++ b/test/cucumber/steps/BibtexImportSteps.groovy @@ -1,68 +1,59 @@ +import junit.framework.Test; +import rgms.publication.*; import cucumber.runtime.PendingException; +import rgms.publication.BibtexFile; import static cucumber.api.groovy.EN.* //You can implement missing steps with the snippets below: Given(~'^I am on Import Bibtex File Menu$') { -> - // Express the Regexp above with the code you wish you had - throw new PendingException() } When(~'^I click "([^"]*)"$') { String arg1 -> - // Express the Regexp above with the code you wish you had - throw new PendingException() } When(~'^selected a bibtex file and I click "([^"]*)"$') { String arg1 -> - // Express the Regexp above with the code you wish you had - throw new PendingException() } Then(~'^is created all corresponding publications$') { -> - // Express the Regexp above with the code you wish you had - throw new PendingException() + BibtexFileController bibtexFileController = new BibtexFileController() + BibtexFile bibtexFile = bibtexFileController.transform(new File("test//cucumber//steps//sample.bibtex")) + assert bibtexFile.getPublications().size() == 3 } Then(~'^all of then are stored$') { -> - // Express the Regexp above with the code you wish you had - throw new PendingException() } When(~'^selected a bibtex file unformatted and I click "([^"]*)"$') { String arg1 -> - // Express the Regexp above with the code you wish you had - throw new PendingException() } +//@Test(expected=RuntimeException.class) Then(~'^the system output the message error "([^"]*)"$') { String arg1 -> - // Express the Regexp above with the code you wish you had - throw new PendingException() + BibtexFileController bibtexFileController = new BibtexFileController() + BibtexFile bibtexFile = bibtexFileController.transform(new File("test//cucumber//steps//sample.bibtex")) } Then(~'^none publication is stored$') { -> - // Express the Regexp above with the code you wish you had - throw new PendingException() } -When(~'^selected a bibtex file with one Book Chapter and two Technical Report and I click "([^"]*)"$') { String arg1 -> - // Express the Regexp above with the code you wish you had - throw new PendingException() +When(~'^selected a bibtex file with one Dissertacao and two Tese and I click "([^"]*)"$') { String arg1 -> } -Then(~'^is created one Book Chapter publication$') { -> - // Express the Regexp above with the code you wish you had - throw new PendingException() +Then(~'^is created one Dissertacao publication$') { -> + BibtexFileController bibtexFileController = new BibtexFileController() + BibtexFile bibtexFile = bibtexFileController.transform(new File("test//cucumber//steps//sample.bibtex")) + assert bibtexFile.getPublications(Conferencia.class).isEmpty() + assert bibtexFile.getPublications(Dissertacao.class).size() == 1 } -Then(~'^is created two Technical Report publications$') { -> - // Express the Regexp above with the code you wish you had - throw new PendingException() +Then(~'^is created two Tese publications$') { -> + BibtexFileController bibtexFileController = new BibtexFileController() + BibtexFile bibtexFile = bibtexFileController.transform(new File("test//cucumber//steps//sample.bibtex")) + assert bibtexFile.getPublications(TechnicalReport.class).isEmpty() + assert bibtexFile.getPublications(Tese.class).size() == 2 } -Then(~'^one Book Chapter is stored and two Technical Report is stored$') { -> - // Express the Regexp above with the code you wish you had - throw new PendingException() +Then(~'^one Dissertacao is stored and two Tese is stored$') { -> } When(~'^I click on "([^"]*)" option at Technical Report list$') { String arg1 -> - // Express the Regexp above with the code you wish you had - throw new PendingException() } \ No newline at end of file diff --git a/test/cucumber/steps/sample.bibtex b/test/cucumber/steps/sample.bibtex new file mode 100644 index 00000000..14302fb7 --- /dev/null +++ b/test/cucumber/steps/sample.bibtex @@ -0,0 +1,26 @@ +@MASTERSTHESIS{Gor:2008, + author = {Samir Gorsky}, + title = {A semântica algébrica para as lógicas modais e seu interesse filosófico}, + school = {IFCH-UNICAMP}, + year = {2008}, + address = {Campinas, Brazil}, + note = {\\ URL = http://samirgorsky.vilabol.uol.com.br/logicamodal.pdf}, +} + +@PHDTHESIS{dCosta_1963_Inconsistent_Formal_Systems, + author = {N. C. A. da Costa}, + title = "Inconsistent Formal Systems \emph{(in Portuguese)}", + school = {Federal University of Parana}, + year = {1963}, + address = "Curitiba, Brazil", + note = {Edited by Editora UFPR, Curitiba, 1993}, +} + +@PHDTHESIS{diogo_doctor, + author = {D. V. de S. Silva}, + title = "Doctor Thesis", + school = {Federal University of Pernambuco}, + year = {2013}, + address = "Recife, Brazil", + note = {Edited by Editora UFPE, Recife, 2013}, +} \ No newline at end of file From a31ec2cdc87b285f81b041ab94dafb0540e9c10a Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Tue, 23 Apr 2013 02:51:12 -0300 Subject: [PATCH 15/32] =?UTF-8?q?Remo=C3=A7=C3=A3o=20de=20linha=20conflita?= =?UTF-8?q?nte=20em=20BibtexImportSteps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit O procedimento de selecionar um novo TechnicalReport já havia sido implementado em outro patch. A função redundante não fazia nada em sua implementação. --- test/cucumber/steps/BibtexImportSteps.groovy | 3 --- 1 file changed, 3 deletions(-) diff --git a/test/cucumber/steps/BibtexImportSteps.groovy b/test/cucumber/steps/BibtexImportSteps.groovy index 1b3fe916..bdd4bada 100644 --- a/test/cucumber/steps/BibtexImportSteps.groovy +++ b/test/cucumber/steps/BibtexImportSteps.groovy @@ -54,6 +54,3 @@ Then(~'^is created two Tese publications$') { -> Then(~'^one Dissertacao is stored and two Tese is stored$') { -> } - -When(~'^I click on "([^"]*)" option at Technical Report list$') { String arg1 -> -} \ No newline at end of file From 9595d1f7f8f7ff3375091b6e0b954677e99738e6 Mon Sep 17 00:00:00 2001 From: diogovss Date: Tue, 23 Apr 2013 16:01:36 -0300 Subject: [PATCH 16/32] Feature model e configuration knowledge de Import Bibtex --- ProductGeneration/ck.xml | 54 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/ProductGeneration/ck.xml b/ProductGeneration/ck.xml index 6e59ba37..6f8036c0 100644 --- a/ProductGeneration/ck.xml +++ b/ProductGeneration/ck.xml @@ -224,5 +224,57 @@ HistoryselectAndMoveComponentRecordController,grails-app/controllers/rgms/RecordController.groovy AuthselectAndMoveComponentRoleController,grails-app/controllers/rgms/RoleController.groovy AuthselectAndMoveComponentShiroDbRealmRGMS,grails-app/realms/rgms/ShiroDbRealm.groovy - + + ImportBibtex + + selectAndMoveComponent + BibtexParse,grails-app/domain/rgms/publication/BibtexParse.groovy + + + + + ImportBibtex + + selectAndMoveComponent + BibtexFile,grails-app/domain/rgms/publication/BibtexFile.groovy + + + + + ImportBibtex + + selectAndMoveComponent + BibtexImportFeature,test/cucumber/BibtexImport.feature + + + + ImportBibtex + + selectAndMoveComponent + BibtexImportSteps,test/cucumber/steps/BibtexImportSteps.groovy + + + + + ImportBibtex + + selectAndMoveComponent + sample,test/cucumber/steps/sample.bibtex + + + + ImportBibtex + + selectAndMoveComponent + BibtexFileController,grails-app/controller/rgms/publication/BibtexFileController.groovy + + + + + ImportBibtex + + selectAndMoveComponent + home,grails-app/views/bibtexFile/home.gsp + + \ No newline at end of file From bf332a3e1ab5084bab193be03ecb6f475a5a5046 Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Tue, 16 Apr 2013 02:29:07 -0300 Subject: [PATCH 17/32] =?UTF-8?q?Determinar=20pt-BR=20como=20idioma=20padr?= =?UTF-8?q?=C3=A3o=20do=20rgms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mesmo determinando o idioma padrão para português, é possível substituí-lo ao passar uma url terminada em ?lang=en_US, por exemplo. --- grails-app/conf/spring/resources.groovy | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/grails-app/conf/spring/resources.groovy b/grails-app/conf/spring/resources.groovy index 25dc7220..d0714db8 100644 --- a/grails-app/conf/spring/resources.groovy +++ b/grails-app/conf/spring/resources.groovy @@ -1,3 +1,7 @@ // Place your Spring DSL code here beans = { + localeResolver(org.springframework.web.servlet.i18n.SessionLocaleResolver) { + defaultLocale = new Locale("pt","BR") + java.util.Locale.setDefault(defaultLocale) + } } From 29e0055a36a108b895dd60a0ebe735709432c19e Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Tue, 28 May 2013 10:35:34 -0300 Subject: [PATCH 18/32] Correcoes em arquivos para suporte a variabilidade de codigo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Versao recente do VMCode (Hephaestus Code) nao suporta algumas tags xml e foi necessario remover as informações inúteis das tags. No mesmo arquivo, ck.xml, foi necessário modificar/remover nomes de arquivos pois alguns deles estavam em diretórios diferentes ou foram excluídos. Dentro do código, todas as linhas comentadas com "ifdef" foram descomentadas para não causar problemas na execução do produto gerado. --- ProductGeneration/ck.xml | 278 ++++++++---------- ProductGeneration/compModelTeste.txt | 65 ++-- .../rgms/member/MemberController.groovy | 25 +- .../publication/PublicationController.groovy | 4 +- .../rgms/publication/Conferencia.groovy | 4 +- .../rgms/publication/Dissertacao.groovy | 4 +- .../domain/rgms/publication/Ferramenta.groovy | 4 +- .../domain/rgms/publication/Periodico.groovy | 4 +- .../domain/rgms/publication/Tese.groovy | 4 +- grails-app/views/researchGroup/show.gsp | 6 +- 10 files changed, 182 insertions(+), 216 deletions(-) diff --git a/ProductGeneration/ck.xml b/ProductGeneration/ck.xml index 6f8036c0..56fe80ef 100644 --- a/ProductGeneration/ck.xml +++ b/ProductGeneration/ck.xml @@ -1,230 +1,208 @@ - - + + rgms createBuildEntriesrgms - + Auth createBuildEntriesAuth - + History createBuildEntriesHistory - + Bibtex createBuildEntriesBibtex - + Website createBuildEntriesWebsite - + XML createBuildEntriesXML - + HTML createBuildEntriesHTML - + PDF createBuildEntriesPDF - + + rgms selectAndMoveComponentindex, grails-app/views/index.gsp -rgmsselectAndMoveComponenterror,grails-app/views/error.gsp -rgmsselectAndMoveComponentmain,grails-app/views/layouts/main.gsp -AuthselectAndMoveComponentlogin,grails-app/views/auth/login.gsp -AuthselectAndMoveComponentlostPassword,grails-app/views/auth/lostPassword.gsp -AuthselectAndMoveComponentresetPassword,grails-app/views/auth/resetPassword.gsp -AuthselectAndMoveComponentupdatePassword,grails-app/views/auth/updatePassword.gsp -AuthselectAndMoveComponentregister,grails-app/views/auth/register.gsp -rgmsselectAndMoveComponentcreateMember,grails-app/views/member/create.gsp -rgmsselectAndMoveComponenteditMember,grails-app/views/member/edit.gsp -rgmsselectAndMoveComponentlistMember,grails-app/views/member/list.gsp -rgmsselectAndMoveComponentshowMember,grails-app/views/member/show.gsp -AuthselectAndMoveComponentcreateRole,grails-app/views/role/create.gsp -AuthselectAndMoveComponenteditRole,grails-app/views/role/edit.gsp -AuthselectAndMoveComponentlistRole,grails-app/views/role/list.gsp -AuthselectAndMoveComponentshowRole,grails-app/views/role/show.gsp -HistoryselectAndMoveComponentshowHistory,grails-app/views/record/show.gsp -HistoryselectAndMoveComponentlistHistory,grails-app/views/record/list.gsp -HistoryselectAndMoveComponenteditHistory,grails-app/views/record/edit.gsp -HistoryselectAndMoveComponentcreateHistory,grails-app/views/record/create.gsp -rgmspreprocessFilesgrails-app/views/researchGroup/show.gsp -rgmsselectAndMoveComponentshowResearchGroup,grails-app/views/researchGroup/show.gsp - -rgmsselectAndMoveComponentconferenciaForm,grails-app/views/conferencia/form.gsp -rgmsselectAndMoveComponentconferenciaCreate,grails-app/views/conferencia/create.gsp -rgmsselectAndMoveComponentconferenciaEdit,grails-app/views/conferencia/edit.gsp -rgmsselectAndMoveComponentconferenciaList,grails-app/views/conferencia/list.gsp -rgmsselectAndMoveComponentconferenciaShow,grails-app/views/conferencia/show.gsp - - +rgmsselectAndMoveComponenterror,grails-app/views/error.gsp +rgmsselectAndMoveComponentmain,grails-app/views/layouts/main.gsp +AuthselectAndMoveComponentlogin,grails-app/views/auth/login.gsp +AuthselectAndMoveComponentlostPassword,grails-app/views/auth/lostPassword.gsp +AuthselectAndMoveComponentresetPassword,grails-app/views/auth/resetPassword.gsp +AuthselectAndMoveComponentupdatePassword,grails-app/views/auth/updatePassword.gsp +AuthselectAndMoveComponentregister,grails-app/views/auth/register.gsp +rgmsselectAndMoveComponentcreateMember,grails-app/views/member/create.gsp +rgmsselectAndMoveComponenteditMember,grails-app/views/member/edit.gsp +rgmsselectAndMoveComponentlistMember,grails-app/views/member/list.gsp +rgmsselectAndMoveComponentshowMember,grails-app/views/member/show.gsp +HistoryselectAndMoveComponentshowHistory,grails-app/views/record/show.gsp +HistoryselectAndMoveComponentlistHistory,grails-app/views/record/list.gsp +HistoryselectAndMoveComponenteditHistory,grails-app/views/record/edit.gsp +HistoryselectAndMoveComponentcreateHistory,grails-app/views/record/create.gsp +rgmspreprocessFilesgrails-app/views/researchGroup/show.gsp +rgmsselectAndMoveComponentshowResearchGroup,grails-app/views/researchGroup/show.gsp -rgmsselectAndMoveComponentformDissertation,grails-app/views/dissertacao/form.gsp -rgmsselectAndMoveComponentcreateDissertation,grails-app/views/dissertacao/create.gsp -rgmsselectAndMoveComponenteditDissertation,grails-app/views/dissertacao/edit.gsp -rgmsselectAndMoveComponentlistDissertation,grails-app/views/dissertacao/list.gsp -rgmsselectAndMoveComponentshowDissertation,grails-app/views/dissertacao/show.gsp +rgmsselectAndMoveComponentconferenciaForm,grails-app/views/conferencia/form.gsp +rgmsselectAndMoveComponentconferenciaCreate,grails-app/views/conferencia/create.gsp +rgmsselectAndMoveComponentconferenciaEdit,grails-app/views/conferencia/edit.gsp +rgmsselectAndMoveComponentconferenciaList,grails-app/views/conferencia/list.gsp +rgmsselectAndMoveComponentconferenciaShow,grails-app/views/conferencia/show.gsp -rgmsselectAndMoveComponentformTool,grails-app/views/ferramenta/form.gsp -rgmsselectAndMoveComponentcreateTool,grails-app/views/ferramenta/create.gsp -rgmsselectAndMoveComponenteditTool,grails-app/views/ferramenta/edit.gsp -rgmsselectAndMoveComponentlistTool,grails-app/views/ferramenta/list.gsp -rgmsselectAndMoveComponentshowTool,grails-app/views/ferramenta/show.gsp +rgmsselectAndMoveComponentformDissertation,grails-app/views/dissertacao/form.gsp +rgmsselectAndMoveComponentcreateDissertation,grails-app/views/dissertacao/create.gsp +rgmsselectAndMoveComponenteditDissertation,grails-app/views/dissertacao/edit.gsp +rgmsselectAndMoveComponentlistDissertation,grails-app/views/dissertacao/list.gsp +rgmsselectAndMoveComponentshowDissertation,grails-app/views/dissertacao/show.gsp -rgmsselectAndMoveComponentformPeriodico,grails-app/views/periodico/form.gsp -rgmsselectAndMoveComponentcreatePeriodico,grails-app/views/periodico/create.gsp -rgmsselectAndMoveComponenteditPeriodico,grails-app/views/periodico/edit.gsp -rgmsselectAndMoveComponentlistPeriodico,grails-app/views/periodico/list.gsp -rgmsselectAndMoveComponentshowPeriodico,grails-app/views/periodico/show.gsp +rgmsselectAndMoveComponentformTool,grails-app/views/ferramenta/form.gsp +rgmsselectAndMoveComponentcreateTool,grails-app/views/ferramenta/create.gsp +rgmsselectAndMoveComponenteditTool,grails-app/views/ferramenta/edit.gsp +rgmsselectAndMoveComponentlistTool,grails-app/views/ferramenta/list.gsp +rgmsselectAndMoveComponentshowTool,grails-app/views/ferramenta/show.gsp -rgmsselectAndMoveComponentindexPublicacao,grails-app/views/publicacao/indexPublicacao.gsp -rgmsselectAndMoveComponentformHistory,grails-app/views/record/form.gsp +rgmsselectAndMoveComponentformPeriodico,grails-app/views/periodico/form.gsp +rgmsselectAndMoveComponentcreatePeriodico,grails-app/views/periodico/create.gsp +rgmsselectAndMoveComponenteditPeriodico,grails-app/views/periodico/edit.gsp +rgmsselectAndMoveComponentlistPeriodico,grails-app/views/periodico/list.gsp +rgmsselectAndMoveComponentshowPeriodico,grails-app/views/periodico/show.gsp -rgmsselectAndMoveComponentformPublication,grails-app/views/publication/form.gsp -rgmsselectAndMoveComponentcreatePublication,grails-app/views/publication/create.gsp -rgmsselectAndMoveComponenteditPublication,grails-app/views/publication/edit.gsp -rgmsselectAndMoveComponentlistPublication,grails-app/views/publication/list.gsp -rgmsselectAndMoveComponentshowPublication,grails-app/views/publication/show.gsp +rgmsselectAndMoveComponentformHistory,grails-app/views/record/form.gsp +rgmsselectAndMoveComponentinitial,grails-app/views/initial.gsp +rgmspreprocessFilesgrails-app/views/initial.gsp -rgmsselectAndMoveComponentformResearchGroup,grails-app/views/researchGroup/form.gsp -rgmsselectAndMoveComponentcreateResearchGroup,grails-app/views/researchGroup/create.gsp -rgmsselectAndMoveComponenteditResearchGroup,grails-app/views/researchGroup/edit.gsp -rgmsselectAndMoveComponentlistResearchGroup,grails-app/views/researchGroup/list.gsp -rgmsselectAndMoveComponenteditMembersResearchGroup,grails-app/views/researchGroup/editMembers.gsp -rgmsselectAndMoveComponentformtese,grails-app/views/tese/form.gsp -rgmsselectAndMoveComponentcreatetese,grails-app/views/tese/create.gsp -rgmsselectAndMoveComponentedittese,grails-app/views/tese/edit.gsp -rgmsselectAndMoveComponentlisttese,grails-app/views/tese/list.gsp -rgmsselectAndMoveComponentshowtese,grails-app/views/tese/show.gsp +rgmsselectAndMoveComponentformResearchGroup,grails-app/views/researchGroup/form.gsp +rgmsselectAndMoveComponentcreateResearchGroup,grails-app/views/researchGroup/create.gsp +rgmsselectAndMoveComponenteditResearchGroup,grails-app/views/researchGroup/edit.gsp +rgmsselectAndMoveComponentlistResearchGroup,grails-app/views/researchGroup/list.gsp +rgmsselectAndMoveComponenteditMembersResearchGroup,grails-app/views/researchGroup/editMembers.gsp -rgmsselectAndMoveComponentBuildConfig,grails-app/conf/BuildConfig.groovy -rgmsselectAndMoveComponentApplicationResources,grails-app/conf/ApplicationResources.groovy -rgmsselectAndMoveComponentDataSource,grails-app/conf/DataSource.groovy -rgmsselectAndMoveComponentUrlMappings,grails-app/conf/UrlMappings.groovy +rgmsselectAndMoveComponentformtese,grails-app/views/tese/form.gsp +rgmsselectAndMoveComponentcreatetese,grails-app/views/tese/create.gsp +rgmsselectAndMoveComponentedittese,grails-app/views/tese/edit.gsp +rgmsselectAndMoveComponentlisttese,grails-app/views/tese/list.gsp +rgmsselectAndMoveComponentshowtese,grails-app/views/tese/show.gsp +rgmsselectAndMoveComponentBuildConfig,grails-app/conf/BuildConfig.groovy +rgmsselectAndMoveComponentApplicationResources,grails-app/conf/ApplicationResources.groovy +rgmsselectAndMoveComponentDataSource,grails-app/conf/DataSource.groovy +rgmsselectAndMoveComponentUrlMappings,grails-app/conf/UrlMappings.groovy -rgmsselectAndMoveComponentpublication,grails-app/domain/rgms/Puplication.groovy -rgmsselectAndMoveComponentconference,grails-app/domain/rgms/Conferencia.groovy -rgmspreprocessFilesgrails-app/domain/rgms/Conferencia.groovy -rgmsselectAndMoveComponentdissertation,grails-app/domain/rgms/Dissertacao.groovy -rgmspreprocessFilesgrails-app/domain/rgms/Dissertacao.groovy -rgmsselectAndMoveComponenttool,grails-app/domain/rgms/Ferramenta.groovy -rgmspreprocessFilesgrails-app/domain/rgms/Ferramenta.groovy -rgmsselectAndMoveComponentperiodical,grails-app/domain/rgms/Periodico.groovy -rgmspreprocessFilesgrails-app/domain/rgms/Periodico.groovy +rgmsselectAndMoveComponentconference,grails-app/domain/rgms/publication/Conferencia.groovy +rgmspreprocessFilesgrails-app/domain/rgms/publication/Conferencia.groovy -rgmsselectAndMoveComponentpublicacao,grails-app/domain/rgms/Publicacao.groovy -rgmspreprocessFilesgrails-app/domain/rgms/Publicacao.groovy +rgmsselectAndMoveComponentdissertation,grails-app/domain/rgms/publication/Dissertacao.groovy +rgmspreprocessFilesgrails-app/domain/rgms/publication/Dissertacao.groovy -rgmsselectAndMoveComponentdefaultValueManager,grails-app/domain/rgms/DefaultValueManager.groovy +rgmsselectAndMoveComponenttool,grails-app/domain/rgms/publication/Ferramenta.groovy +rgmspreprocessFilesgrails-app/domain/rgms/publication/Ferramenta.groovy -rgmsselectAndMoveComponentmemberShip,grails-app/domain/rgms/Membership.groovy +rgmsselectAndMoveComponentperiodical,grails-app/domain/rgms/publication/Periodico.groovy +rgmspreprocessFilesgrails-app/domain/rgms/publication/Periodico.groovy -HistoryselectAndMoveComponenthistory,grails-app/domain/rgms/Record.groovy +rgmsselectAndMoveComponentmemberShip,grails-app/domain/rgms/member/Membership.groovy -rgmsselectAndMoveComponentresearchGroup,grails-app/domain/rgms/ResearchGroup.groovy -rgmspreprocessFilesgrails-app/domain/rgms/ResearchGroup.groovy +HistoryselectAndMoveComponenthistory,grails-app/domain/rgms/member/Record.groovy -rgmsselectAndMoveComponentresearchLine,grails-app/domain/rgms/ResearchLine.groovy +rgmsselectAndMoveComponentresearchGroup,grails-app/domain/rgms/member/ResearchGroup.groovy +rgmspreprocessFilesgrails-app/domain/rgms/member/ResearchGroup.groovy -AuthselectAndMoveComponentRole,grails-app/domain/rgms/Role.groovy +rgmsselectAndMoveComponentresearchLine,grails-app/domain/rgms/publication/ResearchLine.groovy -rgmsselectAndMoveComponentthesis,grails-app/domain/rgms/Tese.groovy -rgmspreprocessFilesgrails-app/domain/rgms/Tese.groovy +AuthselectAndMoveComponentRole,grails-app/domain/rgms/authentication/Role.groovy +rgmsselectAndMoveComponentthesis,grails-app/domain/rgms/publication/Tese.groovy +rgmspreprocessFilesgrails-app/domain/rgms/publication/Tese.groovy -rgmsselectAndMoveComponentConferenciaController,grails-app/controllers/rgms/ConferenciaController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/ConferenciaController.groovy -rgmsselectAndMoveComponentDissertacaoController,grails-app/controllers/rgms/DissertacaoController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/DissertacaoController.groovy +rgmsselectAndMoveComponentConferenciaController,grails-app/controllers/rgms/publication/ConferenciaController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/publication/ConferenciaController.groovy -rgmsselectAndMoveComponentFerramentaController,grails-app/controllers/rgms/FerramentaController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/FerramentaController.groovy +rgmsselectAndMoveComponentDissertacaoController,grails-app/controllers/rgms/publication/DissertacaoController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/publication/DissertacaoController.groovy -rgmsselectAndMoveComponentMembershipController,grails-app/controllers/rgms/MembershipController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/MembershipController.groovy +rgmsselectAndMoveComponentFerramentaController,grails-app/controllers/rgms/publication/FerramentaController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/publication/FerramentaController.groovy -rgmsselectAndMoveComponentPeriodicoController,grails-app/controllers/rgms/PeriodicoController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/PeriodicoController.groovy +rgmsselectAndMoveComponentMembershipController,grails-app/controllers/rgms/member/MembershipController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/member/MembershipController.groovy -rgmsselectAndMoveComponentPublicacaoController,grails-app/controllers/rgms/PublicacaoController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/PublicacaoController.groovy +rgmsselectAndMoveComponentPeriodicoController,grails-app/controllers/rgms/publication/PeriodicoController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/publication/PeriodicoController.groovy -rgmsselectAndMoveComponentPublicationController,grails-app/controllers/rgms/PublicationController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/PublicationController.groovy +rgmsselectAndMoveComponentPublicationController,grails-app/controllers/rgms/publication/PublicationController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/publication/PublicationController.groovy -rgmsselectAndMoveComponentResearchGroupController,grails-app/controllers/rgms/ResearchGroupController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/ResearchGroupController.groovy +rgmsselectAndMoveComponentResearchGroupController,grails-app/controllers/rgms/member/ResearchGroupController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/member/ResearchGroupController.groovy -rgmsselectAndMoveComponentTeseController,grails-app/controllers/rgms/TeseController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/TeseController.groovy +rgmsselectAndMoveComponentTeseController,grails-app/controllers/rgms/publication/TeseController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/publication/TeseController.groovy -AuthselectAndMoveComponentAuthControllerr,grails-app/controllers/AuthController.groovy +AuthselectAndMoveComponentAuthController,grails-app/controllers/rgms/authentication/AuthController.groovy -AuthselectAndMoveComponentShiroRoleController,grails-app/controllers/ShiroRoleController.groovy +AuthselectAndMoveComponentRoleController,grails-app/controllers/rgms/authentication/RoleController.groovy -AuthselectAndMoveComponentShiroUserController,grails-app/controllers/ShiroUserController.groovy -rgmspreprocessFilesgrails-app/domain/rgms/Member.groovy -rgmsselectAndMoveComponentmemberDomain,grails-app/domain/rgms/Member.groovy -AuthselectAndMoveComponentpasswordResetRequest,grails-app/domain/ShiroPasswordResetRequest.groovy -rgmspreprocessFilesgrails-app/conf/BootStrap.groovy -rgmsselectAndMoveComponentBootStrap,grails-app/conf/BootStrap.groovy +rgmsselectAndMoveComponentmemberDomain,grails-app/domain/rgms/member/Member.groovy +rgmspreprocessFilesgrails-app/domain/rgms/member/Member.groovy -AuthselectAndMoveComponentpasswordResetRequest,grails-app/domain/ShiroRole.groovy -AuthselectAndMoveComponentpasswordResetRequest,grails-app/domain/ShiroUser.groovy +AuthselectAndMoveComponentpasswordResetRequest,grails-app/domain/rgms/member/PasswordResetRequest.groovy -rgmspreprocessFilesgrails-app/conf/Config.groovy -rgmsselectAndMoveComponentConfig,grails-app/conf/Config.groovy +rgmsselectAndMoveComponentBootStrap,grails-app/conf/BootStrap.groovy +rgmspreprocessFilesgrails-app/conf/BootStrap.groovy -AuthselectAndMoveComponentShiroSecurityFilters,grails-app/conf/ShiroSecurityFilters.groovy +rgmspreprocessFilesgrails-app/conf/Config.groovy +rgmsselectAndMoveComponentConfig,grails-app/conf/Config.groovy -WebsiteselectAndMoveComponentferramentas,web-app/reports/report_Bundle/ferramentas.jrxml -WebsiteselectAndMoveComponentmemberPubs,web-app/reports/report_Bundle/memberPubs.jrxml -WebsiteselectAndMoveComponentmemberTools,web-app/reports/report_Bundle/memberTools.jrxml -WebsiteselectAndMoveComponentpublications,web-app/reports/report_Bundle/publications.jrxml -WebsiteselectAndMoveComponentreport,web-app/reports/report_Bundle/report.jrxml -WebsiteselectAndMoveComponentreport1,web-app/reports/report_Bundle/report1.jrxml -WebsiteselectAndMoveComponentresearchGroup,web-app/reports/report_Bundle/researchGroup.jrxml +WebsiteselectAndMoveComponentferramentas,web-app/reports/report_Bundle/ferramentas.jrxml +WebsiteselectAndMoveComponentmemberPubs,web-app/reports/report_Bundle/memberPubs.jrxml +WebsiteselectAndMoveComponentmemberTools,web-app/reports/report_Bundle/memberTools.jrxml +WebsiteselectAndMoveComponentpublications,web-app/reports/report_Bundle/publications.jrxml +WebsiteselectAndMoveComponentreport,web-app/reports/report_Bundle/report.jrxml +WebsiteselectAndMoveComponentreport1,web-app/reports/report_Bundle/report1.jrxml +WebsiteselectAndMoveComponentresearchGroup,web-app/reports/report_Bundle/researchGroup.jrxml -WebsiteselectAndMoveComponentreport,grails-app/conf/report.properties -WebsiteselectAndMoveComponentreportFR,grails-app/conf/report_fr.properties -WebsiteselectAndMoveComponentreportBR,grails-app/conf/report_pt_BR.properties -WebsiteselectAndMoveComponentreportUS,grails-app/conf/report_us.properties +WebsiteselectAndMoveComponentreport,grails-app/conf/report.properties +WebsiteselectAndMoveComponentreportFR,grails-app/conf/report_fr.properties +WebsiteselectAndMoveComponentreportBR,grails-app/conf/report_pt_BR.properties +WebsiteselectAndMoveComponentreportUS,grails-app/conf/report_us.properties -AuthselectAndMoveComponentAuthController,grails-app/controllers/rgms/AuthController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/MemberController.groovy -rgmsselectAndMoveComponentMemberController,grails-app/controllers/rgms/MemberController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/member/MemberController.groovy +rgmsselectAndMoveComponentMemberController,grails-app/controllers/rgms/member/MemberController.groovy -HistoryselectAndMoveComponentRecordController,grails-app/controllers/rgms/RecordController.groovy -AuthselectAndMoveComponentRoleController,grails-app/controllers/rgms/RoleController.groovy -AuthselectAndMoveComponentShiroDbRealmRGMS,grails-app/realms/rgms/ShiroDbRealm.groovy - +HistoryselectAndMoveComponentRecordController,grails-app/controllers/rgms/member/RecordController.groovy +AuthselectAndMoveComponentShiroDbRealmRGMS,grails-app/realms/rgms/ShiroDbRealm.groovy + ImportBibtex selectAndMoveComponent @@ -232,7 +210,7 @@ - + ImportBibtex selectAndMoveComponent @@ -240,14 +218,14 @@ - + ImportBibtex selectAndMoveComponent BibtexImportFeature,test/cucumber/BibtexImport.feature - + ImportBibtex selectAndMoveComponent @@ -255,14 +233,14 @@ - + ImportBibtex selectAndMoveComponent sample,test/cucumber/steps/sample.bibtex - + ImportBibtex selectAndMoveComponent @@ -270,7 +248,7 @@ - + ImportBibtex selectAndMoveComponent diff --git a/ProductGeneration/compModelTeste.txt b/ProductGeneration/compModelTeste.txt index 40686bb4..23fe3d2e 100644 --- a/ProductGeneration/compModelTeste.txt +++ b/ProductGeneration/compModelTeste.txt @@ -1,5 +1,6 @@ index => grailsapp/views/index.gsp; error => grailsapp/views/error.gsp; +initial => grailsapp/views/initial.gsp; main => grailsapp/views/layouts/main.gsp; @@ -101,21 +102,20 @@ formtese=> grailsapp/views/tese/form.gsp; -conference => grailsapp/domain/rgms/Conferencia.groovy; -dissertation => grailsapp/domain/rgms/Dissertacao.groovy; -tool => grailsapp/domain/rgms/Ferramenta.groovy; -memberDomain => grailsapp/domain/rgms/Member.groovy; -memberShip => grailsapp/domain/rgms/Membership.groovy; -passwordResetRequest => grailsapp/domain/rgms/PasswordResetRequest.groovy; -periodical => grailsapp/domain/rgms/Periodico.groovy; -publication => grailsapp/domain/rgms/Publication.groovy; -publicacao => grailsapp/domain/rgms/Publicacao.groovy; -history => grailsapp/domain/rgms/Record.groovy; -researchGroup => grailsapp/domain/rgms/ResearchGroup.groovy; -Role => grailsapp/domain/rgms/Role.groovy; -thesis => grailsapp/domain/rgms/Tese.groovy; -researchLine => grailsapp/domain/rgms/ResearchLine.groovy; -defaultValueManager => grailsapp/domain/rgms/DefaultValueManager.groovy; +conference => grailsapp/domain/rgms/publication/Conferencia.groovy; +dissertation => grailsapp/domain/rgms/publication/Dissertacao.groovy; +tool => grailsapp/domain/rgms/publication/Ferramenta.groovy; +memberDomain => grailsapp/domain/rgms/member/Member.groovy; +memberShip => grailsapp/domain/rgms/member/Membership.groovy; +passwordResetRequest => grailsapp/domain/rgms/member/PasswordResetRequest.groovy; +periodical => grailsapp/domain/rgms/publication/Periodico.groovy; +publication => grailsapp/domain/rgms/publication/Publication.groovy; +publicacao => grailsapp/domain/rgms/publication/Publicacao.groovy; +history => grailsapp/domain/rgms/member/Record.groovy; +researchGroup => grailsapp/domain/rgms/member/ResearchGroup.groovy; +Role => grailsapp/domain/rgms/authentication/Role.groovy; +thesis => grailsapp/domain/rgms/publication/Tese.groovy; +researchLine => grailsapp/domain/rgms/publication/ResearchLine.groovy; ApplicationResources => grailsapp/conf/ApplicationResources.groovy; @@ -131,24 +131,25 @@ reportBR => grailsapp/conf/report_pt_BR.properties; reportUS => grailsapp/conf/report_us.properties; -AuthControllerr => grailsapp/controllers/AuthController.groovy; -ShiroRoleController => grailsapp/controllers/ShiroRoleController.groovy; -ShiroUserController => grailsapp/controllers/ShiroUserController.groovy; +AuthController => grailsapp/controllers/rgms/authentication/AuthController.groovy; +RoleController => grailsapp/controllers/rgms/authentication/RoleController.groovy; -AuthController => grailsapp/controllers/rgms/AuthController.groovy; -ConferenciaController => grailsapp/controllers/rgms/ConferenciaController.groovy; -DissertacaoController => grailsapp/controllers/rgms/DissertacaoController.groovy; -FerramentaController => grailsapp/controllers/rgms/FerramentaController.groovy; -MemberController => grailsapp/controllers/rgms/MemberController.groovy; -MembershipController => grailsapp/controllers/rgms/MembershipController.groovy; -PeriodicoController => grailsapp/controllers/rgms/PeriodicoController.groovy; -PublicacaoController => grailsapp/controllers/rgms/PublicacaoController.groovy; -PublicationController => grailsapp/controllers/rgms/PublicationController.groovy; -RecordController => grailsapp/controllers/rgms/RecordController.groovy; -ResearchGroupController => grailsapp/controllers/rgms/ResearchGroupController.groovy; -RoleController => grailsapp/controllers/rgms/RoleController.groovy; -TeseController => grailsapp/controllers/rgms/TeseController.groovy; + +ConferenciaController => grailsapp/controllers/rgms/publication/ConferenciaController.groovy; +DissertacaoController => grailsapp/controllers/rgms/publication/DissertacaoController.groovy; +FerramentaController => grailsapp/controllers/rgms/publication/FerramentaController.groovy; +TeseController => grailsapp/controllers/rgms/publication/TeseController.groovy; +PeriodicoController => grailsapp/controllers/rgms/publication/PeriodicoController.groovy; +PublicationController => grailsapp/controllers/rgms/publication/PublicationController.groovy; + +MemberController => grailsapp/controllers/rgms/member/MemberController.groovy; +MembershipController => grailsapp/controllers/rgms/member/MembershipController.groovy; +RecordController => grailsapp/controllers/rgms/member/RecordController.groovy; +ResearchGroupController => grailsapp/controllers/rgms/member/ResearchGroupController.groovy; + +RoleController => grailsapp/controllers/rgms/authentication/RoleController.groovy; +AuthController => grailsapp/controllers/rgms/authentication/AuthController.groovy; @@ -186,4 +187,4 @@ memberTools => webapp/reports/report_Bundle/memberTools.jrxml; publications => webapp/reports/report_Bundle/publications.jrxml; report => webapp/reports/report_Bundle/report.jrxml; report1 => webapp/reports/report_Bundle/report1.jrxml; -researchGroup => webapp/reports/report_Bundle/researchGroup.jrxml; \ No newline at end of file +researchGroupReport => webapp/reports/report_Bundle/researchGroup.jrxml; \ No newline at end of file diff --git a/grails-app/controllers/rgms/member/MemberController.groovy b/grails-app/controllers/rgms/member/MemberController.groovy index 9b0e1865..06f9ae52 100644 --- a/grails-app/controllers/rgms/member/MemberController.groovy +++ b/grails-app/controllers/rgms/member/MemberController.groovy @@ -29,11 +29,11 @@ class MemberController { } def save = { - // #if($Auth) +#if($Auth) if (!grailsApplication.config.grails.mail.username) { throw new RuntimeException(message(code: 'mail.plugin.not.configured', 'default' : 'Mail plugin not configured')) } - //#end +#end def memberInstance = new Member(params) def username = memberInstance?.username @@ -46,11 +46,6 @@ class MemberController { } memberInstance.passwordChangeRequiredOnNextLogon = true - //#if($History) - //saveHistory(memberInstance,memberInstance.status);//essa ? a maneira correta de chamar - //saveHistory(); - //#end - if (!memberInstance.save(flush: true)) { render(view: "create", model: [memberInstance: memberInstance]) return @@ -60,9 +55,9 @@ class MemberController { to memberInstance.email from grailsApplication.config.grails.mail.username subject "[GRMS] Your account was successfully created!" - //#literal() +#literal() body "Hello ${ memberInstance.name},\n\nYour account was successfully created!\n\nHere is your username: ${ username} and password: ${ password}\n\n${ createLink(absolute: true, uri: '/')}\n\nBest Regards,\nAdministrator of the Research Group Management System".toString() - //#end +#end } flash.message = message(code: 'default.created.message', args: [message(code: 'member.label', default: 'Member'), memberInstance.id]) @@ -122,10 +117,9 @@ class MemberController { if (!check_version(params.version, memberInstance)) return - //feature record - //#if($History) +#if($History) def status0 = memberInstance.status //pega o status anterior do usuario - //#end +#end memberInstance.properties = params //atualiza todos os parametros @@ -134,9 +128,7 @@ class MemberController { return } - //feature record - - //#if($History) //feature record +#if($History) String newStatus = memberInstance.status //pega o novo status @@ -154,8 +146,7 @@ class MemberController { } saveHistory(memberInstance, newStatus) //refactoring - extract method } - //end feature record - // #end +#end flash.message = message(code: 'default.updated.message', args: [message(code: 'member.label', default: 'Member'), memberInstance.id]) redirect(action: "show", id: memberInstance.id) diff --git a/grails-app/controllers/rgms/publication/PublicationController.groovy b/grails-app/controllers/rgms/publication/PublicationController.groovy index a051624d..27c37acb 100644 --- a/grails-app/controllers/rgms/publication/PublicationController.groovy +++ b/grails-app/controllers/rgms/publication/PublicationController.groovy @@ -13,12 +13,12 @@ class PublicationController { render(view: "publication") } - //#if($Bibtex) +#if($Bibtex) def generateBib() { def publication = Publication.get(params.id) render(text: publication.generateBib(), contentType: "text/txt", encoding: "UTF-8") } - //#end +#end def upload(Publication publicationInstance) { diff --git a/grails-app/domain/rgms/publication/Conferencia.groovy b/grails-app/domain/rgms/publication/Conferencia.groovy index 748cc2f7..be211152 100644 --- a/grails-app/domain/rgms/publication/Conferencia.groovy +++ b/grails-app/domain/rgms/publication/Conferencia.groovy @@ -11,13 +11,13 @@ class Conferencia extends Publication { pages nullable: false, blank: false } - //#if($Bibtex) +#if($Bibtex) String generateBib() { return "@inproceedings{"+ super.members.get(0) + super.publicationDate.getAt(Calendar.YEAR) + ",author=\"" + BibtexAux.organizeAuthors(super.members) + "\",\n title=\"" + super.title + "\",\n booktitle=\"" + this.booktitle + "\",\n year=\"" + super.publicationDate.getAt(Calendar.YEAR) + "\",\n pages=\"" + this.pages + "\",\n month=\"" + super.publicationDate.getAt(Calendar.MONTH) + "\"}" } - //#end +#end } \ No newline at end of file diff --git a/grails-app/domain/rgms/publication/Dissertacao.groovy b/grails-app/domain/rgms/publication/Dissertacao.groovy index dcdef182..08664ebb 100644 --- a/grails-app/domain/rgms/publication/Dissertacao.groovy +++ b/grails-app/domain/rgms/publication/Dissertacao.groovy @@ -3,12 +3,12 @@ package rgms.publication class Dissertacao extends TeseOrDissertacao { - //#if($Bibtex) +#if($Bibtex) String generateBib() { return "@masterthesis{" + super.members.get(0) + super.publicationDate.getAt(Calendar.YEAR) + ", author=\"" + BibtexAux.organizeAuthors(super.members) + "\",\n title=\"" + super.title + "\",\n school=\"" + this.school + "\",\n year=\"" + super.publicationDate.getAt(Calendar.YEAR) + "\",\n address=\"" + this.address + "\",\n month=\"" + super.publicationDate.getAt(Calendar.MONTH) + "\"}" } - //#end +#end } \ No newline at end of file diff --git a/grails-app/domain/rgms/publication/Ferramenta.groovy b/grails-app/domain/rgms/publication/Ferramenta.groovy index fd5bdb7c..734f925b 100644 --- a/grails-app/domain/rgms/publication/Ferramenta.groovy +++ b/grails-app/domain/rgms/publication/Ferramenta.groovy @@ -11,12 +11,12 @@ class Ferramenta extends Publication { description nullable: false, blank: false } - //#if($Bibtex) +#if($Bibtex) String generateBib() { return "@misc{"+ super.members.get(0) + super.publicationDate.getAt(Calendar.YEAR) + ",author=\"" + BibtexAux.organizeAuthors(super.members) + "\",\n title=\"" + super.title + "\",\n website=\"" + this.website + "\",\n year=\"" + super.publicationDate.getAt(Calendar.YEAR) + "\",\n description=\"" + this.description + "\",\n month=\"" + super.publicationDate.getAt(Calendar.MONTH) + "\"}" } - //#end +#end } diff --git a/grails-app/domain/rgms/publication/Periodico.groovy b/grails-app/domain/rgms/publication/Periodico.groovy index dabdbf6b..7314fae3 100644 --- a/grails-app/domain/rgms/publication/Periodico.groovy +++ b/grails-app/domain/rgms/publication/Periodico.groovy @@ -14,7 +14,7 @@ class Periodico extends Publication { pages nullable: false, blank: false } - //#if($Bibtex) +#if($Bibtex) String generateBib() { return "@article{"+ super.members.get(0) + super.publicationDate.getAt(Calendar.YEAR) + ",author=\"" + BibtexAux.organizeAuthors(super.members) + "\",\n title=\"" + super.title + "\",\n journal=\"" @@ -22,7 +22,7 @@ class Periodico extends Publication { + this.volume + "\",\n month=\"" + super.publicationDate.getAt(Calendar.MONTH) + "\",\n number=\"" + this.number + "\",\n pages=\"" + this.pages + "\"}" } - //#end +#end @Override public String toString() { diff --git a/grails-app/domain/rgms/publication/Tese.groovy b/grails-app/domain/rgms/publication/Tese.groovy index 7e7ab71a..ddc8c2a3 100644 --- a/grails-app/domain/rgms/publication/Tese.groovy +++ b/grails-app/domain/rgms/publication/Tese.groovy @@ -3,12 +3,12 @@ package rgms.publication class Tese extends TeseOrDissertacao { - //#if($Bibtex) +#if($Bibtex) String generateBib() { return "@phdthesis{"+ super.members.get(1) + super.publicationDate.getAt(Calendar.YEAR) + ",author=\"" + BibtexAux.organizeAuthors(super.members) + "\",\n title=\"" + super.title + "\",\n school=\"" + this.school + "\",\n year=\"" + super.publicationDate.getAt(Calendar.YEAR) + "\",\n address=\"" + this.address + "\"}" } - //#end +#end } diff --git a/grails-app/views/researchGroup/show.gsp b/grails-app/views/researchGroup/show.gsp index 599868d2..a0b45336 100644 --- a/grails-app/views/researchGroup/show.gsp +++ b/grails-app/views/researchGroup/show.gsp @@ -107,11 +107,7 @@ - - ${index+1} - - - ${ n.description?.encodeAsHTML() } - + ${ index + 1} - ${ n.description?.encodeAsHTML() } From 5534a014caad220031c113c8a22a048d30741248 Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Tue, 11 Jun 2013 03:47:26 -0300 Subject: [PATCH 19/32] Adiciona Autofill e modifica os testes para executar somente quando habilitado --- ProductGeneration/ck.xml | 16 ++++++++++++++++ ProductGeneration/compModelTeste.txt | 9 ++++++++- ProductGeneration/featureModel.xml | 4 +++- ProductGeneration/instanceModel.xml | 2 ++ test/cucumber/BookChapter.feature | 4 +++- test/cucumber/Conferencia.feature | 2 ++ test/cucumber/Dissertacao.feature | 4 +++- test/cucumber/Ferramenta.feature | 2 ++ test/cucumber/TechnicalReport.feature | 2 ++ 9 files changed, 41 insertions(+), 4 deletions(-) diff --git a/ProductGeneration/ck.xml b/ProductGeneration/ck.xml index 56fe80ef..6adfbaeb 100644 --- a/ProductGeneration/ck.xml +++ b/ProductGeneration/ck.xml @@ -16,6 +16,10 @@ createBuildEntriesBibtex +Autofill +createBuildEntriesAutofill + + Website createBuildEntriesWebsite @@ -255,4 +259,16 @@ home,grails-app/views/bibtexFile/home.gsp + +rgmsselectAndMoveComponentferramentaFeature,test/cucumber/Ferramenta.feature +rgmspreprocessFilestest/cucumber/Ferramenta.feature +rgmsselectAndMoveComponentbookchapterFeature,test/cucumber/BookChapter.feature +rgmspreprocessFilestest/cucumber/BookChapter.feature +rgmsselectAndMoveComponentconferenciaFeature,test/cucumber/Conferencia.feature +rgmspreprocessFilestest/cucumber/Conferencia.feature +rgmsselectAndMoveComponentdissertacaoFeature,test/cucumber/Dissertacao.feature +rgmspreprocessFilestest/cucumber/Dissertacao.feature +rgmsselectAndMoveComponenttechnicalreportFeature,test/cucumber/TechnicalReport.feature +rgmspreprocessFilestest/cucumber/TechnicalReport.feature + \ No newline at end of file diff --git a/ProductGeneration/compModelTeste.txt b/ProductGeneration/compModelTeste.txt index 23fe3d2e..da51fa9b 100644 --- a/ProductGeneration/compModelTeste.txt +++ b/ProductGeneration/compModelTeste.txt @@ -187,4 +187,11 @@ memberTools => webapp/reports/report_Bundle/memberTools.jrxml; publications => webapp/reports/report_Bundle/publications.jrxml; report => webapp/reports/report_Bundle/report.jrxml; report1 => webapp/reports/report_Bundle/report1.jrxml; -researchGroupReport => webapp/reports/report_Bundle/researchGroup.jrxml; \ No newline at end of file +researchGroupReport => webapp/reports/report_Bundle/researchGroup.jrxml; + +ferramentaFeature => test/cucumber/Ferramenta.feature; +bookchapterFeature => test/cucumber/BookChapter.feature; +dissertacaoFeature => test/cucumber/Dissertacao.feature; +conferenciaFeature => test/cucumber/Conferencia.feature; +technicalreportFeature => test/cucumber/TechnicalReport.feature; + diff --git a/ProductGeneration/featureModel.xml b/ProductGeneration/featureModel.xml index c2180c1f..b3be63ad 100644 --- a/ProductGeneration/featureModel.xml +++ b/ProductGeneration/featureModel.xml @@ -5,7 +5,9 @@ - + + + diff --git a/ProductGeneration/instanceModel.xml b/ProductGeneration/instanceModel.xml index a24c4a96..52fea9db 100644 --- a/ProductGeneration/instanceModel.xml +++ b/ProductGeneration/instanceModel.xml @@ -5,6 +5,8 @@ + + diff --git a/test/cucumber/BookChapter.feature b/test/cucumber/BookChapter.feature index 547a3b3b..2f90a8aa 100644 --- a/test/cucumber/BookChapter.feature +++ b/test/cucumber/BookChapter.feature @@ -32,8 +32,10 @@ Feature: BookChapter And I select the Novo BookChapter option at the book chapter page Then I can fill the book chapter details +#if ($Autofill) Scenario: new book chapter filled with user data by default Given I am at the publication menu When I select the "Book Chapter" option at the publication menu And I select the Novo BookChapter option at the book chapter page - Then I see my user listed as a member of book chapter by default \ No newline at end of file + Then I see my user listed as a member of book chapter by default +#end \ No newline at end of file diff --git a/test/cucumber/Conferencia.feature b/test/cucumber/Conferencia.feature index 48139364..c1d98e6b 100644 --- a/test/cucumber/Conferencia.feature +++ b/test/cucumber/Conferencia.feature @@ -30,8 +30,10 @@ Feature: conferencia When I select the conferencia option at the publications menu Then a list of conferencias stored by the system is displayed at the conferencia page +#if ($Autofill) Scenario: new conferencia web has user data filled by default Given I am at the publications and conferencias menu When I select the conferencia option at the publications menu And I select the new conferencia option at the conferencia page Then I see my user listed as an author member of conferencia by default +#end diff --git a/test/cucumber/Dissertacao.feature b/test/cucumber/Dissertacao.feature index 49dbba22..523d5536 100644 --- a/test/cucumber/Dissertacao.feature +++ b/test/cucumber/Dissertacao.feature @@ -40,10 +40,12 @@ Scenario: delete dissertation And I select "Dissertacao Teste4" at the dissertation page And I delete it Then the system has no dissertation entitled "Dissertacao Teste4" - + +#if ($Autofill) Scenario: create a new dissertation with user data already filled by default Given I am at the publications menu When I select the "Dissertacao" option at the program menu And I select the new dissertation option at the dissertation page Then I see my user listed as an author member of dissertation by default And I see my school name as school of dissertation by default +#end diff --git a/test/cucumber/Ferramenta.feature b/test/cucumber/Ferramenta.feature index d83dd028..f1a86570 100644 --- a/test/cucumber/Ferramenta.feature +++ b/test/cucumber/Ferramenta.feature @@ -26,8 +26,10 @@ Scenario: new ferramenta without any information And I select the create option at the ferramenta page Then The ferramenta is not stored +#if ($Autofill) Scenario: new ferramenta filled with user data by default Given I am at the publications menu When I select the "Ferramenta" option at the program menu And I select the new ferramenta option at the ferramenta page Then I see my user listed as an author member of ferramenta by default +#end diff --git a/test/cucumber/TechnicalReport.feature b/test/cucumber/TechnicalReport.feature index 6284c40c..6266ada5 100644 --- a/test/cucumber/TechnicalReport.feature +++ b/test/cucumber/TechnicalReport.feature @@ -28,8 +28,10 @@ Scenario: edit existing technical report wrong value When I edit the technical report title from "NFL Languages System" to "" Then The technical report "NFL Languages System" is not updated by the system +#if ($Autofill) Scenario: new technical report web has user data already filled by default Given I am at the publications menu And I select the "Technical Report" option at the publications menu When I click on "New TechnicalReport" option at Technical Report list Then I see my user listed as an author member of technical report by default +#end From 1e36cffd525712469d608996a8571a6b3f7e55ad Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Tue, 11 Jun 2013 04:32:38 -0300 Subject: [PATCH 20/32] Variabilidade Autofill no form Conferencia Ja que o Hephaestus nao funciona com o arquivo _form.gsp (bugs?), a variabilidade foi movida para uma camada abaixo atraves do objeto Publication. --- ProductGeneration/ck.xml | 2 ++ grails-app/domain/rgms/publication/Publication.groovy | 8 ++++++++ grails-app/views/conferencia/_form.gsp | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/ProductGeneration/ck.xml b/ProductGeneration/ck.xml index 6adfbaeb..5881b0ae 100644 --- a/ProductGeneration/ck.xml +++ b/ProductGeneration/ck.xml @@ -270,5 +270,7 @@ rgmspreprocessFilestest/cucumber/Dissertacao.feature rgmsselectAndMoveComponenttechnicalreportFeature,test/cucumber/TechnicalReport.feature rgmspreprocessFilestest/cucumber/TechnicalReport.feature +rgmsselectAndMoveComponentpublication,grails-app/domain/rgms/publication/Publication.groovy +rgmspreprocessFilesgrails-app/domain/rgms/publication/Publication.groovy \ No newline at end of file diff --git a/grails-app/domain/rgms/publication/Publication.groovy b/grails-app/domain/rgms/publication/Publication.groovy index beb4b998..1472b914 100644 --- a/grails-app/domain/rgms/publication/Publication.groovy +++ b/grails-app/domain/rgms/publication/Publication.groovy @@ -63,6 +63,14 @@ abstract class Publication { return result; } + public Set membersSelected(loggedUsername) { +#if ($Autofill) + return members ? members : [ Member.findByUsername(loggedUsername).id ]; +#else + return members; +#end + } + // public String retPrimeiroAutor(){ // String[] quebraString = this.author.tokenize(",") // String nomeAutor = quebraString[0] diff --git a/grails-app/views/conferencia/_form.gsp b/grails-app/views/conferencia/_form.gsp index 82f3a984..425eb637 100644 --- a/grails-app/views/conferencia/_form.gsp +++ b/grails-app/views/conferencia/_form.gsp @@ -58,7 +58,7 @@ + value="${conferenciaInstance?.membersSelected(SecurityUtils.subject?.principal)}" /> From fe293ccca7b4d9ce587aa71b4bf14bf1170b26fe Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Tue, 25 Jun 2013 03:49:37 -0300 Subject: [PATCH 21/32] =?UTF-8?q?Refatorar=20testes=20para=20reduzir=20rep?= =?UTF-8?q?eti=C3=A7=C3=A3o=20de=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Na recente feature Autofill, o código da mesma função foi replicado em diversos lugares. Neste patch, essa função foi passada para uma classe FormPage que seria então usada nesses outros lugares. --- ProductGeneration/ck.xml | 6 ++++++ ProductGeneration/compModelTeste.txt | 6 ++++++ test/functional/pages/BookChapterCreatePage.groovy | 8 ++------ test/functional/pages/ConferenciaCreatePage.groovy | 7 ++----- test/functional/pages/DissertationCreate.groovy | 8 ++------ test/functional/pages/FerramentaCreate.groovy | 8 ++------ test/functional/pages/FormPage.groovy | 11 +++++++++++ .../functional/pages/TechnicalReportCreatePage.groovy | 8 ++------ 8 files changed, 33 insertions(+), 29 deletions(-) create mode 100644 test/functional/pages/FormPage.groovy diff --git a/ProductGeneration/ck.xml b/ProductGeneration/ck.xml index 5881b0ae..89781186 100644 --- a/ProductGeneration/ck.xml +++ b/ProductGeneration/ck.xml @@ -272,5 +272,11 @@ rgmspreprocessFilestest/cucumber/TechnicalReport.feature rgmsselectAndMoveComponentpublication,grails-app/domain/rgms/publication/Publication.groovy rgmspreprocessFilesgrails-app/domain/rgms/publication/Publication.groovy +rgmsselectAndMoveComponenttestFunctionalFormPage,test/functional/pages/FormPage.groovy +rgmsselectAndMoveComponenttestFunctionalTechnicalReportCreatePage,test/functional/pages/TechnicalReportCreatePage.groovy +rgmsselectAndMoveComponenttestFunctionalFerramentaCreate,test/functional/pages/FerramentaCreate.groovy +rgmsselectAndMoveComponenttestFunctionalDissertationCreate,test/functional/pages/DissertationCreate.groovy +rgmsselectAndMoveComponenttestFunctionalBookChapterCreatePage,test/functional/pages/BookChapterCreatePage.groovy +rgmsselectAndMoveComponenttestFunctionalConferenciaCreatePage,test/functional/pages/ConferenciaCreatePage.groovy \ No newline at end of file diff --git a/ProductGeneration/compModelTeste.txt b/ProductGeneration/compModelTeste.txt index da51fa9b..6ae473b9 100644 --- a/ProductGeneration/compModelTeste.txt +++ b/ProductGeneration/compModelTeste.txt @@ -195,3 +195,9 @@ dissertacaoFeature => test/cucumber/Dissertacao.feature; conferenciaFeature => test/cucumber/Conferencia.feature; technicalreportFeature => test/cucumber/TechnicalReport.feature; +testFunctionalFormPage => test/functional/pages/FormPage.groovy; +testFunctionalTechnicalReportCreatePage => test/functional/pages/TechnicalReportCreatePage.groovy; +testFunctionalFerramentaCreate => test/functional/pages/FerramentaCreate.groovy; +testFunctionalDissertationCreate => test/functional/pages/DissertationCreate.groovy; +testFunctionalBookChapterCreatePage => test/functional/pages/BookChapterCreatePage.groovy; +testFunctionalConferenciaCreatePage => test/functional/pages/ConferenciaCreatePage.groovy; diff --git a/test/functional/pages/BookChapterCreatePage.groovy b/test/functional/pages/BookChapterCreatePage.groovy index 59fa4d17..1d15533c 100644 --- a/test/functional/pages/BookChapterCreatePage.groovy +++ b/test/functional/pages/BookChapterCreatePage.groovy @@ -1,8 +1,8 @@ package pages -import geb.Page +import pages.FormPage -class BookChapterCreatePage extends Page{ +class BookChapterCreatePage extends FormPage { static url = "bookChapter/create" static at = { @@ -30,8 +30,4 @@ class BookChapterCreatePage extends Page{ $("form").title = "A theory of Software Product Line Refinement" $("form").create().click() } - - def selectedMembers() { - $("form").members - } } diff --git a/test/functional/pages/ConferenciaCreatePage.groovy b/test/functional/pages/ConferenciaCreatePage.groovy index 8dc3fd7d..028a7e5a 100644 --- a/test/functional/pages/ConferenciaCreatePage.groovy +++ b/test/functional/pages/ConferenciaCreatePage.groovy @@ -1,8 +1,8 @@ package pages -import geb.Page +import pages.FormPage -class ConferenciaCreatePage extends Page{ +class ConferenciaCreatePage extends FormPage { static url = "conferencia/create" static at = { @@ -31,7 +31,4 @@ class ConferenciaCreatePage extends Page{ $("form").create().click() } - def selectedMembers() { - $("form").members - } } diff --git a/test/functional/pages/DissertationCreate.groovy b/test/functional/pages/DissertationCreate.groovy index 124c66cb..be3d89e1 100644 --- a/test/functional/pages/DissertationCreate.groovy +++ b/test/functional/pages/DissertationCreate.groovy @@ -1,8 +1,8 @@ package pages -import geb.Page +import pages.FormPage -class DissertationCreate extends Page { +class DissertationCreate extends FormPage { static url = "dissertacao/create" static at = { @@ -26,9 +26,5 @@ class DissertationCreate extends Page { def currentSchool() { $("form").school } - - def selectedMembers() { - $("form").members - } } diff --git a/test/functional/pages/FerramentaCreate.groovy b/test/functional/pages/FerramentaCreate.groovy index 684ad5d2..40bea7b6 100644 --- a/test/functional/pages/FerramentaCreate.groovy +++ b/test/functional/pages/FerramentaCreate.groovy @@ -1,8 +1,8 @@ package pages -import geb.Page +import pages.FormPage -class FerramentaCreate extends Page { +class FerramentaCreate extends FormPage { static url = "ferramenta/create" static at = { @@ -30,9 +30,5 @@ class FerramentaCreate extends Page { def createNewFerramentaWithoutInformation(){ $("form").create().click() } - - def selectedMembers() { - $("form").members - } } diff --git a/test/functional/pages/FormPage.groovy b/test/functional/pages/FormPage.groovy new file mode 100644 index 00000000..9f3772dd --- /dev/null +++ b/test/functional/pages/FormPage.groovy @@ -0,0 +1,11 @@ +package pages + +import geb.Page + +class FormPage extends Page { + + def selectedMembers() { + $("form").members + } + +} \ No newline at end of file diff --git a/test/functional/pages/TechnicalReportCreatePage.groovy b/test/functional/pages/TechnicalReportCreatePage.groovy index 04594078..447b6f1a 100644 --- a/test/functional/pages/TechnicalReportCreatePage.groovy +++ b/test/functional/pages/TechnicalReportCreatePage.groovy @@ -1,8 +1,8 @@ package pages -import geb.Page +import pages.FormPage -class TechnicalReportCreatePage extends Page { +class TechnicalReportCreatePage extends FormPage { static url = "technicalReport/create" static at = { @@ -21,8 +21,4 @@ class TechnicalReportCreatePage extends Page { $("form").journal = "Theoretical Computer Science" // Could parametrize, obtaining data from class TestDataAndOperations } - - def selectedMembers() { - $("form").members - } } From f69fb71a114feff0755da4bbfe692e45b96d12e6 Mon Sep 17 00:00:00 2001 From: diogovss Date: Tue, 25 Jun 2013 15:01:21 -0300 Subject: [PATCH 22/32] import bibtex --- ProductGeneration/ck.xml | 271 ++++++++---------- ProductGeneration/compModelTeste.txt | 11 +- ProductGeneration/featureModel.xml | 2 + .../hephaestus/project.properties | 16 +- ProductGeneration/instanceModel.xml | 2 + .../rgms/member/MemberController.groovy | 16 +- .../publication/PublicationController.groovy | 4 +- .../rgms/publication/Conferencia.groovy | 4 +- .../rgms/publication/Dissertacao.groovy | 4 +- .../domain/rgms/publication/Ferramenta.groovy | 4 +- .../domain/rgms/publication/Periodico.groovy | 4 +- .../rgms/publication/Publication.groovy | 6 +- .../domain/rgms/publication/Tese.groovy | 4 +- grails-app/views/initial.gsp | 4 + .../AuxiliarControllerTests.groovy | 2 +- 15 files changed, 173 insertions(+), 181 deletions(-) diff --git a/ProductGeneration/ck.xml b/ProductGeneration/ck.xml index 89781186..9885f4b8 100644 --- a/ProductGeneration/ck.xml +++ b/ProductGeneration/ck.xml @@ -1,262 +1,241 @@ - - + + rgms createBuildEntriesrgms - + Auth createBuildEntriesAuth - + History createBuildEntriesHistory - + Bibtex createBuildEntriesBibtex - -Autofill -createBuildEntriesAutofill - - + Website createBuildEntriesWebsite - + XML createBuildEntriesXML - + HTML createBuildEntriesHTML - + PDF createBuildEntriesPDF - + rgms selectAndMoveComponentindex, grails-app/views/index.gsp -rgmsselectAndMoveComponenterror,grails-app/views/error.gsp -rgmsselectAndMoveComponentmain,grails-app/views/layouts/main.gsp -AuthselectAndMoveComponentlogin,grails-app/views/auth/login.gsp -AuthselectAndMoveComponentlostPassword,grails-app/views/auth/lostPassword.gsp -AuthselectAndMoveComponentresetPassword,grails-app/views/auth/resetPassword.gsp -AuthselectAndMoveComponentupdatePassword,grails-app/views/auth/updatePassword.gsp -AuthselectAndMoveComponentregister,grails-app/views/auth/register.gsp -rgmsselectAndMoveComponentcreateMember,grails-app/views/member/create.gsp -rgmsselectAndMoveComponenteditMember,grails-app/views/member/edit.gsp -rgmsselectAndMoveComponentlistMember,grails-app/views/member/list.gsp -rgmsselectAndMoveComponentshowMember,grails-app/views/member/show.gsp -HistoryselectAndMoveComponentshowHistory,grails-app/views/record/show.gsp -HistoryselectAndMoveComponentlistHistory,grails-app/views/record/list.gsp -HistoryselectAndMoveComponenteditHistory,grails-app/views/record/edit.gsp -HistoryselectAndMoveComponentcreateHistory,grails-app/views/record/create.gsp -rgmspreprocessFilesgrails-app/views/researchGroup/show.gsp -rgmsselectAndMoveComponentshowResearchGroup,grails-app/views/researchGroup/show.gsp - -rgmsselectAndMoveComponentconferenciaForm,grails-app/views/conferencia/form.gsp -rgmsselectAndMoveComponentconferenciaCreate,grails-app/views/conferencia/create.gsp -rgmsselectAndMoveComponentconferenciaEdit,grails-app/views/conferencia/edit.gsp -rgmsselectAndMoveComponentconferenciaList,grails-app/views/conferencia/list.gsp -rgmsselectAndMoveComponentconferenciaShow,grails-app/views/conferencia/show.gsp +rgmsselectAndMoveComponenterror,grails-app/views/error.gsp +rgmsselectAndMoveComponentmain,grails-app/views/layouts/main.gsp +AuthselectAndMoveComponentlogin,grails-app/views/auth/login.gsp +AuthselectAndMoveComponentlostPassword,grails-app/views/auth/lostPassword.gsp +AuthselectAndMoveComponentresetPassword,grails-app/views/auth/resetPassword.gsp +AuthselectAndMoveComponentupdatePassword,grails-app/views/auth/updatePassword.gsp +AuthselectAndMoveComponentregister,grails-app/views/auth/register.gsp +rgmsselectAndMoveComponentcreateMember,grails-app/views/member/create.gsp +rgmsselectAndMoveComponenteditMember,grails-app/views/member/edit.gsp +rgmsselectAndMoveComponentlistMember,grails-app/views/member/list.gsp +rgmsselectAndMoveComponentshowMember,grails-app/views/member/show.gsp +HistoryselectAndMoveComponentshowHistory,grails-app/views/record/show.gsp +HistoryselectAndMoveComponentlistHistory,grails-app/views/record/list.gsp +HistoryselectAndMoveComponenteditHistory,grails-app/views/record/edit.gsp +HistoryselectAndMoveComponentcreateHistory,grails-app/views/record/create.gsp +rgmspreprocessFilesgrails-app/views/researchGroup/show.gsp +rgmsselectAndMoveComponentshowResearchGroup,grails-app/views/researchGroup/show.gsp +rgmsselectAndMoveComponentconferenciaForm,grails-app/views/conferencia/form.gsp +rgmsselectAndMoveComponentconferenciaCreate,grails-app/views/conferencia/create.gsp +rgmsselectAndMoveComponentconferenciaEdit,grails-app/views/conferencia/edit.gsp +rgmsselectAndMoveComponentconferenciaList,grails-app/views/conferencia/list.gsp +rgmsselectAndMoveComponentconferenciaShow,grails-app/views/conferencia/show.gsp -rgmsselectAndMoveComponentformDissertation,grails-app/views/dissertacao/form.gsp -rgmsselectAndMoveComponentcreateDissertation,grails-app/views/dissertacao/create.gsp -rgmsselectAndMoveComponenteditDissertation,grails-app/views/dissertacao/edit.gsp -rgmsselectAndMoveComponentlistDissertation,grails-app/views/dissertacao/list.gsp -rgmsselectAndMoveComponentshowDissertation,grails-app/views/dissertacao/show.gsp +rgmsselectAndMoveComponentformDissertation,grails-app/views/dissertacao/form.gsp +rgmsselectAndMoveComponentcreateDissertation,grails-app/views/dissertacao/create.gsp +rgmsselectAndMoveComponenteditDissertation,grails-app/views/dissertacao/edit.gsp +rgmsselectAndMoveComponentlistDissertation,grails-app/views/dissertacao/list.gsp +rgmsselectAndMoveComponentshowDissertation,grails-app/views/dissertacao/show.gsp -rgmsselectAndMoveComponentformTool,grails-app/views/ferramenta/form.gsp -rgmsselectAndMoveComponentcreateTool,grails-app/views/ferramenta/create.gsp -rgmsselectAndMoveComponenteditTool,grails-app/views/ferramenta/edit.gsp -rgmsselectAndMoveComponentlistTool,grails-app/views/ferramenta/list.gsp -rgmsselectAndMoveComponentshowTool,grails-app/views/ferramenta/show.gsp +rgmsselectAndMoveComponentformTool,grails-app/views/ferramenta/form.gsp +rgmsselectAndMoveComponentcreateTool,grails-app/views/ferramenta/create.gsp +rgmsselectAndMoveComponenteditTool,grails-app/views/ferramenta/edit.gsp +rgmsselectAndMoveComponentlistTool,grails-app/views/ferramenta/list.gsp +rgmsselectAndMoveComponentshowTool,grails-app/views/ferramenta/show.gsp -rgmsselectAndMoveComponentformPeriodico,grails-app/views/periodico/form.gsp -rgmsselectAndMoveComponentcreatePeriodico,grails-app/views/periodico/create.gsp -rgmsselectAndMoveComponenteditPeriodico,grails-app/views/periodico/edit.gsp -rgmsselectAndMoveComponentlistPeriodico,grails-app/views/periodico/list.gsp -rgmsselectAndMoveComponentshowPeriodico,grails-app/views/periodico/show.gsp +rgmsselectAndMoveComponentformPeriodico,grails-app/views/periodico/form.gsp +rgmsselectAndMoveComponentcreatePeriodico,grails-app/views/periodico/create.gsp +rgmsselectAndMoveComponenteditPeriodico,grails-app/views/periodico/edit.gsp +rgmsselectAndMoveComponentlistPeriodico,grails-app/views/periodico/list.gsp +rgmsselectAndMoveComponentshowPeriodico,grails-app/views/periodico/show.gsp -rgmsselectAndMoveComponentformHistory,grails-app/views/record/form.gsp -rgmsselectAndMoveComponentinitial,grails-app/views/initial.gsp -rgmspreprocessFilesgrails-app/views/initial.gsp +rgmsselectAndMoveComponentformHistory,grails-app/views/record/form.gsp +rgmsselectAndMoveComponentinitial,grails-app/views/initial.gsp +rgmspreprocessFilesgrails-app/views/initial.gsp -rgmsselectAndMoveComponentformResearchGroup,grails-app/views/researchGroup/form.gsp -rgmsselectAndMoveComponentcreateResearchGroup,grails-app/views/researchGroup/create.gsp -rgmsselectAndMoveComponenteditResearchGroup,grails-app/views/researchGroup/edit.gsp -rgmsselectAndMoveComponentlistResearchGroup,grails-app/views/researchGroup/list.gsp -rgmsselectAndMoveComponenteditMembersResearchGroup,grails-app/views/researchGroup/editMembers.gsp +rgmsselectAndMoveComponentformResearchGroup,grails-app/views/researchGroup/form.gsp +rgmsselectAndMoveComponentcreateResearchGroup,grails-app/views/researchGroup/create.gsp +rgmsselectAndMoveComponenteditResearchGroup,grails-app/views/researchGroup/edit.gsp +rgmsselectAndMoveComponentlistResearchGroup,grails-app/views/researchGroup/list.gsp +rgmsselectAndMoveComponenteditMembersResearchGroup,grails-app/views/researchGroup/editMembers.gsp -rgmsselectAndMoveComponentformtese,grails-app/views/tese/form.gsp -rgmsselectAndMoveComponentcreatetese,grails-app/views/tese/create.gsp -rgmsselectAndMoveComponentedittese,grails-app/views/tese/edit.gsp -rgmsselectAndMoveComponentlisttese,grails-app/views/tese/list.gsp -rgmsselectAndMoveComponentshowtese,grails-app/views/tese/show.gsp +rgmsselectAndMoveComponentformtese,grails-app/views/tese/form.gsp +rgmsselectAndMoveComponentcreatetese,grails-app/views/tese/create.gsp +rgmsselectAndMoveComponentedittese,grails-app/views/tese/edit.gsp +rgmsselectAndMoveComponentlisttese,grails-app/views/tese/list.gsp +rgmsselectAndMoveComponentshowtese,grails-app/views/tese/show.gsp -rgmsselectAndMoveComponentBuildConfig,grails-app/conf/BuildConfig.groovy -rgmsselectAndMoveComponentApplicationResources,grails-app/conf/ApplicationResources.groovy -rgmsselectAndMoveComponentDataSource,grails-app/conf/DataSource.groovy -rgmsselectAndMoveComponentUrlMappings,grails-app/conf/UrlMappings.groovy +rgmsselectAndMoveComponentBuildConfig,grails-app/conf/BuildConfig.groovy +rgmsselectAndMoveComponentApplicationResources,grails-app/conf/ApplicationResources.groovy +rgmsselectAndMoveComponentDataSource,grails-app/conf/DataSource.groovy +rgmsselectAndMoveComponentUrlMappings,grails-app/conf/UrlMappings.groovy -rgmsselectAndMoveComponentconference,grails-app/domain/rgms/publication/Conferencia.groovy -rgmspreprocessFilesgrails-app/domain/rgms/publication/Conferencia.groovy -rgmsselectAndMoveComponentdissertation,grails-app/domain/rgms/publication/Dissertacao.groovy -rgmspreprocessFilesgrails-app/domain/rgms/publication/Dissertacao.groovy +rgmsselectAndMoveComponentconference,grails-app/domain/rgms/publication/Conferencia.groovy +rgmspreprocessFilesgrails-app/domain/rgms/publication/Conferencia.groovy -rgmsselectAndMoveComponenttool,grails-app/domain/rgms/publication/Ferramenta.groovy -rgmspreprocessFilesgrails-app/domain/rgms/publication/Ferramenta.groovy +rgmsselectAndMoveComponentdissertation,grails-app/domain/rgms/publication/Dissertacao.groovy +rgmspreprocessFilesgrails-app/domain/rgms/publication/Dissertacao.groovy -rgmsselectAndMoveComponentperiodical,grails-app/domain/rgms/publication/Periodico.groovy -rgmspreprocessFilesgrails-app/domain/rgms/publication/Periodico.groovy +rgmsselectAndMoveComponenttool,grails-app/domain/rgms/publication/Ferramenta.groovy +rgmspreprocessFilesgrails-app/domain/rgms/publication/Ferramenta.groovy -rgmsselectAndMoveComponentmemberShip,grails-app/domain/rgms/member/Membership.groovy +rgmsselectAndMoveComponentperiodical,grails-app/domain/rgms/publication/Periodico.groovy +rgmspreprocessFilesgrails-app/domain/rgms/publication/Periodico.groovy -HistoryselectAndMoveComponenthistory,grails-app/domain/rgms/member/Record.groovy +rgmsselectAndMoveComponentmemberShip,grails-app/domain/rgms/member/Membership.groovy -rgmsselectAndMoveComponentresearchGroup,grails-app/domain/rgms/member/ResearchGroup.groovy -rgmspreprocessFilesgrails-app/domain/rgms/member/ResearchGroup.groovy +HistoryselectAndMoveComponenthistory,grails-app/domain/rgms/member/Record.groovy -rgmsselectAndMoveComponentresearchLine,grails-app/domain/rgms/publication/ResearchLine.groovy +rgmsselectAndMoveComponentresearchGroup,grails-app/domain/rgms/member/ResearchGroup.groovy +rgmspreprocessFilesgrails-app/domain/rgms/member/ResearchGroup.groovy -AuthselectAndMoveComponentRole,grails-app/domain/rgms/authentication/Role.groovy +rgmsselectAndMoveComponentresearchLine,grails-app/domain/rgms/publication/ResearchLine.groovy -rgmsselectAndMoveComponentthesis,grails-app/domain/rgms/publication/Tese.groovy -rgmspreprocessFilesgrails-app/domain/rgms/publication/Tese.groovy +AuthselectAndMoveComponentRole,grails-app/domain/rgms/authentication/Role.groovy +rgmsselectAndMoveComponentthesis,grails-app/domain/rgms/publication/Tese.groovy +rgmspreprocessFilesgrails-app/domain/rgms/publication/Tese.groovy -rgmsselectAndMoveComponentConferenciaController,grails-app/controllers/rgms/publication/ConferenciaController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/publication/ConferenciaController.groovy -rgmsselectAndMoveComponentDissertacaoController,grails-app/controllers/rgms/publication/DissertacaoController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/publication/DissertacaoController.groovy +rgmsselectAndMoveComponentConferenciaController,grails-app/controllers/rgms/publication/ConferenciaController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/publication/ConferenciaController.groovy -rgmsselectAndMoveComponentFerramentaController,grails-app/controllers/rgms/publication/FerramentaController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/publication/FerramentaController.groovy +rgmsselectAndMoveComponentDissertacaoController,grails-app/controllers/rgms/publication/DissertacaoController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/publication/DissertacaoController.groovy -rgmsselectAndMoveComponentMembershipController,grails-app/controllers/rgms/member/MembershipController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/member/MembershipController.groovy +rgmsselectAndMoveComponentFerramentaController,grails-app/controllers/rgms/publication/FerramentaController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/publication/FerramentaController.groovy -rgmsselectAndMoveComponentPeriodicoController,grails-app/controllers/rgms/publication/PeriodicoController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/publication/PeriodicoController.groovy +rgmsselectAndMoveComponentMembershipController,grails-app/controllers/rgms/member/MembershipController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/member/MembershipController.groovy -rgmsselectAndMoveComponentPublicationController,grails-app/controllers/rgms/publication/PublicationController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/publication/PublicationController.groovy +rgmsselectAndMoveComponentPeriodicoController,grails-app/controllers/rgms/publication/PeriodicoController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/publication/PeriodicoController.groovy -rgmsselectAndMoveComponentResearchGroupController,grails-app/controllers/rgms/member/ResearchGroupController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/member/ResearchGroupController.groovy +rgmsselectAndMoveComponentPublicationController,grails-app/controllers/rgms/publication/PublicationController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/publication/PublicationController.groovy -rgmsselectAndMoveComponentTeseController,grails-app/controllers/rgms/publication/TeseController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/publication/TeseController.groovy +rgmsselectAndMoveComponentResearchGroupController,grails-app/controllers/rgms/member/ResearchGroupController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/member/ResearchGroupController.groovy -AuthselectAndMoveComponentAuthController,grails-app/controllers/rgms/authentication/AuthController.groovy +rgmsselectAndMoveComponentTeseController,grails-app/controllers/rgms/publication/TeseController.groovy +rgmspreprocessFilesgrails-app/controllers/rgms/publication/TeseController.groovy -AuthselectAndMoveComponentRoleController,grails-app/controllers/rgms/authentication/RoleController.groovy +AuthselectAndMoveComponentAuthController,grails-app/controllers/rgms/authentication/AuthController.groovy +AuthselectAndMoveComponentRoleController,grails-app/controllers/rgms/authentication/RoleController.groovy -rgmsselectAndMoveComponentmemberDomain,grails-app/domain/rgms/member/Member.groovy -rgmspreprocessFilesgrails-app/domain/rgms/member/Member.groovy -AuthselectAndMoveComponentpasswordResetRequest,grails-app/domain/rgms/member/PasswordResetRequest.groovy +rgmsselectAndMoveComponentmemberDomain,grails-app/domain/rgms/member/Member.groovy +rgmspreprocessFilesgrails-app/domain/rgms/member/Member.groovy -rgmsselectAndMoveComponentBootStrap,grails-app/conf/BootStrap.groovy -rgmspreprocessFilesgrails-app/conf/BootStrap.groovy +AuthselectAndMoveComponentpasswordResetRequest,grails-app/domain/rgms/member/PasswordResetRequest.groovy -rgmspreprocessFilesgrails-app/conf/Config.groovy -rgmsselectAndMoveComponentConfig,grails-app/conf/Config.groovy +rgmsselectAndMoveComponentBootStrap,grails-app/conf/BootStrap.groovy +rgmspreprocessFilesgrails-app/conf/BootStrap.groovy -WebsiteselectAndMoveComponentferramentas,web-app/reports/report_Bundle/ferramentas.jrxml -WebsiteselectAndMoveComponentmemberPubs,web-app/reports/report_Bundle/memberPubs.jrxml -WebsiteselectAndMoveComponentmemberTools,web-app/reports/report_Bundle/memberTools.jrxml -WebsiteselectAndMoveComponentpublications,web-app/reports/report_Bundle/publications.jrxml -WebsiteselectAndMoveComponentreport,web-app/reports/report_Bundle/report.jrxml -WebsiteselectAndMoveComponentreport1,web-app/reports/report_Bundle/report1.jrxml -WebsiteselectAndMoveComponentresearchGroup,web-app/reports/report_Bundle/researchGroup.jrxml +rgmspreprocessFilesgrails-app/conf/Config.groovy +rgmsselectAndMoveComponentConfig,grails-app/conf/Config.groovy -WebsiteselectAndMoveComponentreport,grails-app/conf/report.properties -WebsiteselectAndMoveComponentreportFR,grails-app/conf/report_fr.properties -WebsiteselectAndMoveComponentreportBR,grails-app/conf/report_pt_BR.properties -WebsiteselectAndMoveComponentreportUS,grails-app/conf/report_us.properties +rgmspreprocessFilesgrails-app/controllers/rgms/member/MemberController.groovy +rgmsselectAndMoveComponentMemberController,grails-app/controllers/rgms/member/MemberController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/member/MemberController.groovy -rgmsselectAndMoveComponentMemberController,grails-app/controllers/rgms/member/MemberController.groovy - -HistoryselectAndMoveComponentRecordController,grails-app/controllers/rgms/member/RecordController.groovy -AuthselectAndMoveComponentShiroDbRealmRGMS,grails-app/realms/rgms/ShiroDbRealm.groovy - +HistoryselectAndMoveComponentRecordController,grails-app/controllers/rgms/member/RecordController.groovy +AuthselectAndMoveComponentShiroDbRealmRGMS,grails-app/realms/rgms/ShiroDbRealm.groovy + ImportBibtex selectAndMoveComponent - BibtexParse,grails-app/domain/rgms/publication/BibtexParse.groovy - + bibtexParse,grails-app/domain/rgms/publication/BibtexParse.groovy - + ImportBibtex selectAndMoveComponent - BibtexFile,grails-app/domain/rgms/publication/BibtexFile.groovy - + bibtexFile,grails-app/domain/rgms/publication/BibtexFile.groovy - + ImportBibtex selectAndMoveComponent - BibtexImportFeature,test/cucumber/BibtexImport.feature + bibtexImportFeature,test/cucumber/BibtexImport.feature - + ImportBibtex selectAndMoveComponent - BibtexImportSteps,test/cucumber/steps/BibtexImportSteps.groovy - + bibtexImportSteps,test/cucumber/steps/BibtexImportSteps.groovy - + ImportBibtex selectAndMoveComponent - sample,test/cucumber/steps/sample.bibtex + sampleBibtex,test/cucumber/steps/sample.bibtex - + ImportBibtex selectAndMoveComponent - BibtexFileController,grails-app/controller/rgms/publication/BibtexFileController.groovy - + bibtexFileController,grails-app/controllers/rgms/publication/BibtexFileController.groovy - + ImportBibtex selectAndMoveComponent - home,grails-app/views/bibtexFile/home.gsp + homeBibtexFile,grails-app/views/bibtexFile/home.gsp @@ -278,5 +257,5 @@ rgmsselectAndMoveComponenttestFunctionalDissertationCreate,test/functional/pages/DissertationCreate.groovy rgmsselectAndMoveComponenttestFunctionalBookChapterCreatePage,test/functional/pages/BookChapterCreatePage.groovy rgmsselectAndMoveComponenttestFunctionalConferenciaCreatePage,test/functional/pages/ConferenciaCreatePage.groovy - - \ No newline at end of file + + diff --git a/ProductGeneration/compModelTeste.txt b/ProductGeneration/compModelTeste.txt index 6ae473b9..971129df 100644 --- a/ProductGeneration/compModelTeste.txt +++ b/ProductGeneration/compModelTeste.txt @@ -194,10 +194,19 @@ bookchapterFeature => test/cucumber/BookChapter.feature; dissertacaoFeature => test/cucumber/Dissertacao.feature; conferenciaFeature => test/cucumber/Conferencia.feature; technicalreportFeature => test/cucumber/TechnicalReport.feature; - + testFunctionalFormPage => test/functional/pages/FormPage.groovy; testFunctionalTechnicalReportCreatePage => test/functional/pages/TechnicalReportCreatePage.groovy; testFunctionalFerramentaCreate => test/functional/pages/FerramentaCreate.groovy; testFunctionalDissertationCreate => test/functional/pages/DissertationCreate.groovy; testFunctionalBookChapterCreatePage => test/functional/pages/BookChapterCreatePage.groovy; testFunctionalConferenciaCreatePage => test/functional/pages/ConferenciaCreatePage.groovy; + +bibtexParse => grailsapp/domain/rgms/publication/BibtexParse.groovy; +bibtexFile => grailsapp/domain/rgms/publication/BibtexFile.groovy; +bibtexFileController => grailsapp/controllers/rgms/publication/BibtexFileController.groovy; +sampleBibtex => test/cucumber/steps/sample.bibtex; +homeBibtexFile => grailsapp/views/bibtexFile/home.gsp; +bibtexImportFeature => test/cucumber/BibtexImport.feature; +bibtexImportSteps => test/cucumber/steps/BibtexImportSteps.groovy; + diff --git a/ProductGeneration/featureModel.xml b/ProductGeneration/featureModel.xml index b3be63ad..ef01c017 100644 --- a/ProductGeneration/featureModel.xml +++ b/ProductGeneration/featureModel.xml @@ -6,6 +6,8 @@ + + diff --git a/ProductGeneration/hephaestus/project.properties b/ProductGeneration/hephaestus/project.properties index bbc9f46b..680b2226 100644 --- a/ProductGeneration/hephaestus/project.properties +++ b/ProductGeneration/hephaestus/project.properties @@ -1,11 +1,7 @@ name=rgms -feature-model=C:\Users\Rodrigo\Documents\GitHub\rgms/featureModel.xml - -configuration-model=C:\Users\Rodrigo\Documents\GitHub\rgms/ck.xml - -instance-model=C:\Users\Rodrigo\Documents\GitHub\rgms/instanceModel.xml - -component-model=C:\Users\Rodrigo\Documents\GitHub\rgms/compModelTeste.txt - -source-dir=C:\Users\Rodrigo\Documents\GitHub\rgms -target-dir=C:\Users\Rodrigo\Documents\GitHub\rgms_v1 \ No newline at end of file +feature-model=C:\spl\final\rgms\ProductGeneration/featureModel.xml +configuration-model=C:\spl\final\rgms\ProductGeneration/ck.xml +instance-model=C:\spl\final\rgms\ProductGeneration/instanceModel.xml +component-model=C:\spl\final\rgms\ProductGeneration/compModelTeste.txt +source-dir=C:\spl\final\rgmsMiddleware +target-dir=C:\spl\final\rgmsProcessed \ No newline at end of file diff --git a/ProductGeneration/instanceModel.xml b/ProductGeneration/instanceModel.xml index 52fea9db..7c33a9d2 100644 --- a/ProductGeneration/instanceModel.xml +++ b/ProductGeneration/instanceModel.xml @@ -6,6 +6,8 @@ + + diff --git a/grails-app/controllers/rgms/member/MemberController.groovy b/grails-app/controllers/rgms/member/MemberController.groovy index 06f9ae52..f0310416 100644 --- a/grails-app/controllers/rgms/member/MemberController.groovy +++ b/grails-app/controllers/rgms/member/MemberController.groovy @@ -29,11 +29,11 @@ class MemberController { } def save = { -#if($Auth) +//#if($Auth) if (!grailsApplication.config.grails.mail.username) { throw new RuntimeException(message(code: 'mail.plugin.not.configured', 'default' : 'Mail plugin not configured')) } -#end +//#end def memberInstance = new Member(params) def username = memberInstance?.username @@ -55,9 +55,9 @@ class MemberController { to memberInstance.email from grailsApplication.config.grails.mail.username subject "[GRMS] Your account was successfully created!" -#literal() +//#literal() body "Hello ${ memberInstance.name},\n\nYour account was successfully created!\n\nHere is your username: ${ username} and password: ${ password}\n\n${ createLink(absolute: true, uri: '/')}\n\nBest Regards,\nAdministrator of the Research Group Management System".toString() -#end +//#end } flash.message = message(code: 'default.created.message', args: [message(code: 'member.label', default: 'Member'), memberInstance.id]) @@ -117,9 +117,9 @@ class MemberController { if (!check_version(params.version, memberInstance)) return -#if($History) +//#if($History) def status0 = memberInstance.status //pega o status anterior do usuario -#end +//#end memberInstance.properties = params //atualiza todos os parametros @@ -128,7 +128,7 @@ class MemberController { return } -#if($History) +//#if($History) String newStatus = memberInstance.status //pega o novo status @@ -146,7 +146,7 @@ class MemberController { } saveHistory(memberInstance, newStatus) //refactoring - extract method } -#end +//#end flash.message = message(code: 'default.updated.message', args: [message(code: 'member.label', default: 'Member'), memberInstance.id]) redirect(action: "show", id: memberInstance.id) diff --git a/grails-app/controllers/rgms/publication/PublicationController.groovy b/grails-app/controllers/rgms/publication/PublicationController.groovy index 27c37acb..e152c89b 100644 --- a/grails-app/controllers/rgms/publication/PublicationController.groovy +++ b/grails-app/controllers/rgms/publication/PublicationController.groovy @@ -13,12 +13,12 @@ class PublicationController { render(view: "publication") } -#if($Bibtex) +//#if($Bibtex) def generateBib() { def publication = Publication.get(params.id) render(text: publication.generateBib(), contentType: "text/txt", encoding: "UTF-8") } -#end +//#end def upload(Publication publicationInstance) { diff --git a/grails-app/domain/rgms/publication/Conferencia.groovy b/grails-app/domain/rgms/publication/Conferencia.groovy index be211152..568ce683 100644 --- a/grails-app/domain/rgms/publication/Conferencia.groovy +++ b/grails-app/domain/rgms/publication/Conferencia.groovy @@ -11,13 +11,13 @@ class Conferencia extends Publication { pages nullable: false, blank: false } -#if($Bibtex) +//#if($Bibtex) String generateBib() { return "@inproceedings{"+ super.members.get(0) + super.publicationDate.getAt(Calendar.YEAR) + ",author=\"" + BibtexAux.organizeAuthors(super.members) + "\",\n title=\"" + super.title + "\",\n booktitle=\"" + this.booktitle + "\",\n year=\"" + super.publicationDate.getAt(Calendar.YEAR) + "\",\n pages=\"" + this.pages + "\",\n month=\"" + super.publicationDate.getAt(Calendar.MONTH) + "\"}" } -#end +//#end } \ No newline at end of file diff --git a/grails-app/domain/rgms/publication/Dissertacao.groovy b/grails-app/domain/rgms/publication/Dissertacao.groovy index 08664ebb..186933f7 100644 --- a/grails-app/domain/rgms/publication/Dissertacao.groovy +++ b/grails-app/domain/rgms/publication/Dissertacao.groovy @@ -3,12 +3,12 @@ package rgms.publication class Dissertacao extends TeseOrDissertacao { -#if($Bibtex) +//#if($Bibtex) String generateBib() { return "@masterthesis{" + super.members.get(0) + super.publicationDate.getAt(Calendar.YEAR) + ", author=\"" + BibtexAux.organizeAuthors(super.members) + "\",\n title=\"" + super.title + "\",\n school=\"" + this.school + "\",\n year=\"" + super.publicationDate.getAt(Calendar.YEAR) + "\",\n address=\"" + this.address + "\",\n month=\"" + super.publicationDate.getAt(Calendar.MONTH) + "\"}" } -#end +//#end } \ No newline at end of file diff --git a/grails-app/domain/rgms/publication/Ferramenta.groovy b/grails-app/domain/rgms/publication/Ferramenta.groovy index 734f925b..2276a91d 100644 --- a/grails-app/domain/rgms/publication/Ferramenta.groovy +++ b/grails-app/domain/rgms/publication/Ferramenta.groovy @@ -11,12 +11,12 @@ class Ferramenta extends Publication { description nullable: false, blank: false } -#if($Bibtex) +//#if($Bibtex) String generateBib() { return "@misc{"+ super.members.get(0) + super.publicationDate.getAt(Calendar.YEAR) + ",author=\"" + BibtexAux.organizeAuthors(super.members) + "\",\n title=\"" + super.title + "\",\n website=\"" + this.website + "\",\n year=\"" + super.publicationDate.getAt(Calendar.YEAR) + "\",\n description=\"" + this.description + "\",\n month=\"" + super.publicationDate.getAt(Calendar.MONTH) + "\"}" } -#end +//#end } diff --git a/grails-app/domain/rgms/publication/Periodico.groovy b/grails-app/domain/rgms/publication/Periodico.groovy index 7314fae3..b84399e3 100644 --- a/grails-app/domain/rgms/publication/Periodico.groovy +++ b/grails-app/domain/rgms/publication/Periodico.groovy @@ -14,7 +14,7 @@ class Periodico extends Publication { pages nullable: false, blank: false } -#if($Bibtex) +//#if($Bibtex) String generateBib() { return "@article{"+ super.members.get(0) + super.publicationDate.getAt(Calendar.YEAR) + ",author=\"" + BibtexAux.organizeAuthors(super.members) + "\",\n title=\"" + super.title + "\",\n journal=\"" @@ -22,7 +22,7 @@ class Periodico extends Publication { + this.volume + "\",\n month=\"" + super.publicationDate.getAt(Calendar.MONTH) + "\",\n number=\"" + this.number + "\",\n pages=\"" + this.pages + "\"}" } -#end +//#end @Override public String toString() { diff --git a/grails-app/domain/rgms/publication/Publication.groovy b/grails-app/domain/rgms/publication/Publication.groovy index 1472b914..0d9ecddf 100644 --- a/grails-app/domain/rgms/publication/Publication.groovy +++ b/grails-app/domain/rgms/publication/Publication.groovy @@ -64,11 +64,11 @@ abstract class Publication { } public Set membersSelected(loggedUsername) { -#if ($Autofill) +//#if ($Autofill) return members ? members : [ Member.findByUsername(loggedUsername).id ]; -#else +//#else return members; -#end +//#end } // public String retPrimeiroAutor(){ diff --git a/grails-app/domain/rgms/publication/Tese.groovy b/grails-app/domain/rgms/publication/Tese.groovy index ddc8c2a3..5cba112a 100644 --- a/grails-app/domain/rgms/publication/Tese.groovy +++ b/grails-app/domain/rgms/publication/Tese.groovy @@ -3,12 +3,12 @@ package rgms.publication class Tese extends TeseOrDissertacao { -#if($Bibtex) +//#if($Bibtex) String generateBib() { return "@phdthesis{"+ super.members.get(1) + super.publicationDate.getAt(Calendar.YEAR) + ",author=\"" + BibtexAux.organizeAuthors(super.members) + "\",\n title=\"" + super.title + "\",\n school=\"" + this.school + "\",\n year=\"" + super.publicationDate.getAt(Calendar.YEAR) + "\",\n address=\"" + this.address + "\"}" } -#end +//#end } diff --git a/grails-app/views/initial.gsp b/grails-app/views/initial.gsp index 44c2eda6..4b75157f 100644 --- a/grails-app/views/initial.gsp +++ b/grails-app/views/initial.gsp @@ -146,6 +146,10 @@
  • Tese
  • Orientation
  • Import Bibtex File
  • + + Testando compilação condicional + + diff --git a/test/unit/rgms/publication/AuxiliarControllerTests.groovy b/test/unit/rgms/publication/AuxiliarControllerTests.groovy index ea678c36..a8ca12ee 100644 --- a/test/unit/rgms/publication/AuxiliarControllerTests.groovy +++ b/test/unit/rgms/publication/AuxiliarControllerTests.groovy @@ -8,7 +8,7 @@ import org.junit.* /** * See the API for {@link grails.test.mixin.web.ControllerUnitTestMixin} for usage instructions */ -@TestFor(AuxiliarController) +//@TestFor(AuxiliarController) class AuxiliarControllerTests { void testSomething() { From 023ff3ed6ce9537eff269278dd1993f848233895 Mon Sep 17 00:00:00 2001 From: diogovss Date: Wed, 26 Jun 2013 02:49:10 -0300 Subject: [PATCH 23/32] =?UTF-8?q?Feature=20ImportBibtex=20-=20corre=C3=A7?= =?UTF-8?q?=C3=A3o=20da=20compila=C3=A7=C3=A3o=20condicional=20para=20visu?= =?UTF-8?q?alizar=20o=20link=20no=20menu=20principal=20(initial.gsp).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProductGeneration/ck.xml | 40 ++++++++++++++++++++---------------- grails-app/views/initial.gsp | 3 +-- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/ProductGeneration/ck.xml b/ProductGeneration/ck.xml index 9885f4b8..82e7e1af 100644 --- a/ProductGeneration/ck.xml +++ b/ProductGeneration/ck.xml @@ -16,6 +16,10 @@ createBuildEntriesBibtex +ImportBibtex +createBuildEntriesImportBibtex + + Website createBuildEntriesWebsite @@ -239,23 +243,23 @@ -rgmsselectAndMoveComponentferramentaFeature,test/cucumber/Ferramenta.feature -rgmspreprocessFilestest/cucumber/Ferramenta.feature -rgmsselectAndMoveComponentbookchapterFeature,test/cucumber/BookChapter.feature -rgmspreprocessFilestest/cucumber/BookChapter.feature -rgmsselectAndMoveComponentconferenciaFeature,test/cucumber/Conferencia.feature -rgmspreprocessFilestest/cucumber/Conferencia.feature -rgmsselectAndMoveComponentdissertacaoFeature,test/cucumber/Dissertacao.feature -rgmspreprocessFilestest/cucumber/Dissertacao.feature -rgmsselectAndMoveComponenttechnicalreportFeature,test/cucumber/TechnicalReport.feature -rgmspreprocessFilestest/cucumber/TechnicalReport.feature -rgmsselectAndMoveComponentpublication,grails-app/domain/rgms/publication/Publication.groovy -rgmspreprocessFilesgrails-app/domain/rgms/publication/Publication.groovy -rgmsselectAndMoveComponenttestFunctionalFormPage,test/functional/pages/FormPage.groovy -rgmsselectAndMoveComponenttestFunctionalTechnicalReportCreatePage,test/functional/pages/TechnicalReportCreatePage.groovy -rgmsselectAndMoveComponenttestFunctionalFerramentaCreate,test/functional/pages/FerramentaCreate.groovy -rgmsselectAndMoveComponenttestFunctionalDissertationCreate,test/functional/pages/DissertationCreate.groovy -rgmsselectAndMoveComponenttestFunctionalBookChapterCreatePage,test/functional/pages/BookChapterCreatePage.groovy -rgmsselectAndMoveComponenttestFunctionalConferenciaCreatePage,test/functional/pages/ConferenciaCreatePage.groovy +rgmsselectAndMoveComponentferramentaFeature,test/cucumber/Ferramenta.feature +rgmspreprocessFilestest/cucumber/Ferramenta.feature +rgmsselectAndMoveComponentbookchapterFeature,test/cucumber/BookChapter.feature +rgmspreprocessFilestest/cucumber/BookChapter.feature +rgmsselectAndMoveComponentconferenciaFeature,test/cucumber/Conferencia.feature +rgmspreprocessFilestest/cucumber/Conferencia.feature +rgmsselectAndMoveComponentdissertacaoFeature,test/cucumber/Dissertacao.feature +rgmspreprocessFilestest/cucumber/Dissertacao.feature +rgmsselectAndMoveComponenttechnicalreportFeature,test/cucumber/TechnicalReport.feature +rgmspreprocessFilestest/cucumber/TechnicalReport.feature +rgmsselectAndMoveComponentpublication,grails-app/domain/rgms/publication/Publication.groovy +rgmspreprocessFilesgrails-app/domain/rgms/publication/Publication.groovy +rgmsselectAndMoveComponenttestFunctionalFormPage,test/functional/pages/FormPage.groovy +rgmsselectAndMoveComponenttestFunctionalTechnicalReportCreatePage,test/functional/pages/TechnicalReportCreatePage.groovy +rgmsselectAndMoveComponenttestFunctionalFerramentaCreate,test/functional/pages/FerramentaCreate.groovy +rgmsselectAndMoveComponenttestFunctionalDissertationCreate,test/functional/pages/DissertationCreate.groovy +rgmsselectAndMoveComponenttestFunctionalBookChapterCreatePage,test/functional/pages/BookChapterCreatePage.groovy +rgmsselectAndMoveComponenttestFunctionalConferenciaCreatePage,test/functional/pages/ConferenciaCreatePage.groovy diff --git a/grails-app/views/initial.gsp b/grails-app/views/initial.gsp index 4b75157f..c6612c95 100644 --- a/grails-app/views/initial.gsp +++ b/grails-app/views/initial.gsp @@ -145,9 +145,8 @@
  • Technical Report
  • Tese
  • Orientation
  • +
  • Import Bibtex File
  • - - Testando compilação condicional From 1aef2fadda88162b9c9affa7ee00345d2e913fe9 Mon Sep 17 00:00:00 2001 From: diogovss Date: Wed, 26 Jun 2013 04:02:02 -0300 Subject: [PATCH 24/32] =?UTF-8?q?Evoluindo=20a=20Linha=20de=20Produtos=20-?= =?UTF-8?q?=20Refatora=C3=A7=C3=A3o=20da=20feature=20Importa=C3=A7=C3=A3o?= =?UTF-8?q?=20de=20Bibtex,=20criando=20classes=20separadas=20para=20o=20pa?= =?UTF-8?q?rse=20de=20cada=20tipo=20de=20publica=C3=A7=C3=A3o.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProductGeneration/ck.xml | 21 ++++++++++++++ ProductGeneration/compModelTeste.txt | 6 +++- .../rgms/publication/BibtexParse.groovy | 15 ++++------ .../strategyBibtexParse/StrategyParse.java | 23 +++++++++++++++ .../StrategyParseDissertacao.java | 28 +++++++++++++++++++ .../StrategyParseTese.java | 28 +++++++++++++++++++ 6 files changed, 110 insertions(+), 11 deletions(-) create mode 100644 grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParse.java create mode 100644 grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParseDissertacao.java create mode 100644 grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParseTese.java diff --git a/ProductGeneration/ck.xml b/ProductGeneration/ck.xml index 82e7e1af..db370168 100644 --- a/ProductGeneration/ck.xml +++ b/ProductGeneration/ck.xml @@ -242,6 +242,27 @@ homeBibtexFile,grails-app/views/bibtexFile/home.gsp + + ImportBibtex + + selectAndMoveComponent + strategyParse,grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParse.java + + + + ImportBibtex + + selectAndMoveComponent + strategyParseDissertacao,grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParseDissertacao.java + + + + ImportBibtex + + selectAndMoveComponent + strategyParseTese,grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParseTese.java + + rgmsselectAndMoveComponentferramentaFeature,test/cucumber/Ferramenta.feature rgmspreprocessFilestest/cucumber/Ferramenta.feature diff --git a/ProductGeneration/compModelTeste.txt b/ProductGeneration/compModelTeste.txt index 971129df..a3ef4b13 100644 --- a/ProductGeneration/compModelTeste.txt +++ b/ProductGeneration/compModelTeste.txt @@ -208,5 +208,9 @@ bibtexFileController => grailsapp/controllers/rgms/publication/BibtexFileControl sampleBibtex => test/cucumber/steps/sample.bibtex; homeBibtexFile => grailsapp/views/bibtexFile/home.gsp; bibtexImportFeature => test/cucumber/BibtexImport.feature; -bibtexImportSteps => test/cucumber/steps/BibtexImportSteps.groovy; +bibtexImportSteps => test/cucumber/steps/BibtexImportSteps.groovy; +strategyParse => grailsapp/domain/rgms/publication/strategyBibtexParse/StrategyParse.java; +strategyParseDissertacao => grailsapp/domain/rgms/publication/strategyBibtexParse/StrategyParseDissertacao.java; +strategyParseTese => grailsapp/domain/rgms/publication/strategyBibtexParse/StrategyParseTese.java; + diff --git a/grails-app/domain/rgms/publication/BibtexParse.groovy b/grails-app/domain/rgms/publication/BibtexParse.groovy index 59e61fc7..824bd664 100644 --- a/grails-app/domain/rgms/publication/BibtexParse.groovy +++ b/grails-app/domain/rgms/publication/BibtexParse.groovy @@ -1,12 +1,13 @@ package rgms.publication import org.jbibtex.BibTeXDatabase -import org.jbibtex.BibTeXEntry; +import org.jbibtex.BibTeXEntry import org.jbibtex.BibTeXParser import org.jbibtex.BibTeXString import org.jbibtex.Key import org.jbibtex.ParseException -import org.jbibtex.Value + +import rgms.publication.strategyBibtexParse.StrategyParseDissertacao /** * @@ -49,13 +50,7 @@ class BibtexParse { } else if (entry.getType().equals(BibTeXEntry.TYPE_MASTERSTHESIS)) { - Dissertacao dissertacao = new Dissertacao() - dissertacao.setTitle(entry.getField(BibTeXEntry.KEY_TITLE).toUserString()) - dissertacao.setSchool(entry.getField(BibTeXEntry.KEY_SCHOOL).toUserString()) - dissertacao.setAddress(entry.getField(BibTeXEntry.KEY_ADDRESS).toUserString()) - dissertacao.setPublicationDate(new Date())//TODO transformar o date para setar no objeto - dissertacao.setFile("file")//TODO tirar a obrigatoriedade. futuramente processar a url para importar - publications.add(dissertacao) + publications.add(new StrategyParseDissertacao(entry)) } else if (entry.getType().equals(BibTeXEntry.TYPE_MISC)) { @@ -84,7 +79,7 @@ class BibtexParse { return publications } - + private static BibTeXDatabase parseBibTeX(File file) throws IOException, ParseException { Reader reader = new FileReader(file); diff --git a/grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParse.java b/grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParse.java new file mode 100644 index 00000000..efdfc046 --- /dev/null +++ b/grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParse.java @@ -0,0 +1,23 @@ +package rgms.publication.strategyBibtexParse; + +import org.jbibtex.BibTeXEntry; + +import rgms.publication.Publication; + +/** + * + * @author Diogo Vinicius + * + */ +public interface StrategyParse { + + // + /** + * Para pegar os valores do objeto 'entry' basta seguir o modelo da linha abaixo
    + * String value = entry.getField(BibTeXEntry.KEY_TITLE).toUserString(); + * @param entry + * @return Publication + */ + public abstract Publication execute(BibTeXEntry entry); + +} diff --git a/grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParseDissertacao.java b/grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParseDissertacao.java new file mode 100644 index 00000000..d00bb5cd --- /dev/null +++ b/grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParseDissertacao.java @@ -0,0 +1,28 @@ +package rgms.publication.strategyBibtexParse; + +import java.util.Date; + +import org.jbibtex.BibTeXEntry; + +import rgms.publication.Dissertacao; +import rgms.publication.Publication; + +/** + * + * @author Diogo Vinicius + * + */ +public class StrategyParseDissertacao implements StrategyParse { + + @Override + public Publication execute(BibTeXEntry entry) { + Dissertacao dissertacao = new Dissertacao(); + dissertacao.setTitle(entry.getField(BibTeXEntry.KEY_TITLE).toUserString()); + dissertacao.setSchool(entry.getField(BibTeXEntry.KEY_SCHOOL).toUserString()); + dissertacao.setAddress(entry.getField(BibTeXEntry.KEY_ADDRESS).toUserString()); + dissertacao.setPublicationDate(new Date());//TODO transformar o date para setar no objeto + dissertacao.setFile("file");//TODO tirar a obrigatoriedade. futuramente processar a url para importar + return dissertacao; + } + +} diff --git a/grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParseTese.java b/grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParseTese.java new file mode 100644 index 00000000..fd1bbdf0 --- /dev/null +++ b/grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParseTese.java @@ -0,0 +1,28 @@ +package rgms.publication.strategyBibtexParse; + +import java.util.Date; + +import org.jbibtex.BibTeXEntry; + +import rgms.publication.Publication; +import rgms.publication.Tese; + +/** + * + * @author Diogo Vinicius + * + */ +public class StrategyParseTese implements StrategyParse { + + @Override + public Publication execute(BibTeXEntry entry) { + Tese tese = new Tese(); + tese.setTitle(entry.getField(BibTeXEntry.KEY_TITLE).toUserString()); + tese.setSchool(entry.getField(BibTeXEntry.KEY_SCHOOL).toUserString()); + tese.setAddress(entry.getField(BibTeXEntry.KEY_ADDRESS).toUserString()); + tese.setPublicationDate(new Date());//TODO transformar o date para setar no objeto + tese.setFile("file");//TODO settar corretamente este atributo + return tese; + } + +} From b815d9257b26a38494445774902cbdf11668267f Mon Sep 17 00:00:00 2001 From: diogovss Date: Wed, 26 Jun 2013 12:58:07 -0300 Subject: [PATCH 25/32] =?UTF-8?q?Parte=20da=20refatora=C3=A7=C3=A3o=20do?= =?UTF-8?q?=20ImportBibtex=20que=20n=C3=A3o=20foi=20no=20=C3=BAltimo=20pus?= =?UTF-8?q?h=20por=20algum=20problema=20no=20eclipse.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- grails-app/domain/rgms/publication/BibtexParse.groovy | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/grails-app/domain/rgms/publication/BibtexParse.groovy b/grails-app/domain/rgms/publication/BibtexParse.groovy index 824bd664..87e95d47 100644 --- a/grails-app/domain/rgms/publication/BibtexParse.groovy +++ b/grails-app/domain/rgms/publication/BibtexParse.groovy @@ -7,6 +7,7 @@ import org.jbibtex.BibTeXString import org.jbibtex.Key import org.jbibtex.ParseException +import rgms.publication.strategyBibtexParse.StrategyParseTese import rgms.publication.strategyBibtexParse.StrategyParseDissertacao /** @@ -50,19 +51,13 @@ class BibtexParse { } else if (entry.getType().equals(BibTeXEntry.TYPE_MASTERSTHESIS)) { - publications.add(new StrategyParseDissertacao(entry)) + publications.add(new StrategyParseDissertacao().execute(entry)) } else if (entry.getType().equals(BibTeXEntry.TYPE_MISC)) { } else if (entry.getType().equals(BibTeXEntry.TYPE_PHDTHESIS)) { - Tese tese = new Tese() - tese.setTitle(entry.getField(BibTeXEntry.KEY_TITLE).toUserString()) - tese.setSchool(entry.getField(BibTeXEntry.KEY_SCHOOL).toUserString()) - tese.setAddress(entry.getField(BibTeXEntry.KEY_ADDRESS).toUserString()) - tese.setPublicationDate(new Date())//TODO transformar o date para setar no objeto - tese.setFile("file")//TODO settar corretamente este atributo - publications.add(tese) + publications.add(new StrategyParseTese().execute(entry)) } else if (entry.getType().equals(BibTeXEntry.TYPE_PROCEEDINGS)) { From 73ccfe2bf5a8e70807a61bd43d4dcea17e26a95c Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Tue, 2 Jul 2013 02:53:51 -0300 Subject: [PATCH 26/32] Saida do CK deveria apontar para nome valido em form.gsp --- ProductGeneration/ck.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/ProductGeneration/ck.xml b/ProductGeneration/ck.xml index db370168..85f4ac34 100644 --- a/ProductGeneration/ck.xml +++ b/ProductGeneration/ck.xml @@ -58,7 +58,7 @@ rgmspreprocessFilesgrails-app/views/researchGroup/show.gsp rgmsselectAndMoveComponentshowResearchGroup,grails-app/views/researchGroup/show.gsp -rgmsselectAndMoveComponentconferenciaForm,grails-app/views/conferencia/form.gsp +rgmsselectAndMoveComponentconferenciaForm,grails-app/views/conferencia/_form.gsp rgmsselectAndMoveComponentconferenciaCreate,grails-app/views/conferencia/create.gsp rgmsselectAndMoveComponentconferenciaEdit,grails-app/views/conferencia/edit.gsp rgmsselectAndMoveComponentconferenciaList,grails-app/views/conferencia/list.gsp @@ -66,14 +66,14 @@ -rgmsselectAndMoveComponentformDissertation,grails-app/views/dissertacao/form.gsp +rgmsselectAndMoveComponentformDissertation,grails-app/views/dissertacao/_form.gsp rgmsselectAndMoveComponentcreateDissertation,grails-app/views/dissertacao/create.gsp rgmsselectAndMoveComponenteditDissertation,grails-app/views/dissertacao/edit.gsp rgmsselectAndMoveComponentlistDissertation,grails-app/views/dissertacao/list.gsp rgmsselectAndMoveComponentshowDissertation,grails-app/views/dissertacao/show.gsp -rgmsselectAndMoveComponentformTool,grails-app/views/ferramenta/form.gsp +rgmsselectAndMoveComponentformTool,grails-app/views/ferramenta/_form.gsp rgmsselectAndMoveComponentcreateTool,grails-app/views/ferramenta/create.gsp rgmsselectAndMoveComponenteditTool,grails-app/views/ferramenta/edit.gsp rgmsselectAndMoveComponentlistTool,grails-app/views/ferramenta/list.gsp @@ -81,14 +81,14 @@ -rgmsselectAndMoveComponentformPeriodico,grails-app/views/periodico/form.gsp +rgmsselectAndMoveComponentformPeriodico,grails-app/views/periodico/_form.gsp rgmsselectAndMoveComponentcreatePeriodico,grails-app/views/periodico/create.gsp rgmsselectAndMoveComponenteditPeriodico,grails-app/views/periodico/edit.gsp rgmsselectAndMoveComponentlistPeriodico,grails-app/views/periodico/list.gsp rgmsselectAndMoveComponentshowPeriodico,grails-app/views/periodico/show.gsp -rgmsselectAndMoveComponentformHistory,grails-app/views/record/form.gsp +rgmsselectAndMoveComponentformHistory,grails-app/views/record/_form.gsp rgmsselectAndMoveComponentinitial,grails-app/views/initial.gsp rgmspreprocessFilesgrails-app/views/initial.gsp @@ -96,14 +96,14 @@ -rgmsselectAndMoveComponentformResearchGroup,grails-app/views/researchGroup/form.gsp +rgmsselectAndMoveComponentformResearchGroup,grails-app/views/researchGroup/_form.gsp rgmsselectAndMoveComponentcreateResearchGroup,grails-app/views/researchGroup/create.gsp rgmsselectAndMoveComponenteditResearchGroup,grails-app/views/researchGroup/edit.gsp rgmsselectAndMoveComponentlistResearchGroup,grails-app/views/researchGroup/list.gsp rgmsselectAndMoveComponenteditMembersResearchGroup,grails-app/views/researchGroup/editMembers.gsp -rgmsselectAndMoveComponentformtese,grails-app/views/tese/form.gsp +rgmsselectAndMoveComponentformtese,grails-app/views/tese/_form.gsp rgmsselectAndMoveComponentcreatetese,grails-app/views/tese/create.gsp rgmsselectAndMoveComponentedittese,grails-app/views/tese/edit.gsp rgmsselectAndMoveComponentlisttese,grails-app/views/tese/list.gsp @@ -282,5 +282,5 @@ rgmsselectAndMoveComponenttestFunctionalDissertationCreate,test/functional/pages/DissertationCreate.groovy rgmsselectAndMoveComponenttestFunctionalBookChapterCreatePage,test/functional/pages/BookChapterCreatePage.groovy rgmsselectAndMoveComponenttestFunctionalConferenciaCreatePage,test/functional/pages/ConferenciaCreatePage.groovy - - + + From 5292ca60a9f52a6dc085953c8263f202d08131d3 Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Tue, 2 Jul 2013 12:11:06 -0300 Subject: [PATCH 27/32] Evoluindo a Linha de Produtos: refatoramento de Autofill MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Além do refatoramento, a feature foi reativada. --- ProductGeneration/ck.xml | 8 ++++++++ ProductGeneration/compModelTeste.txt | 11 +++++++---- .../domain/rgms/publication/TeseOrDissertacao.groovy | 10 ++++++++++ grails-app/views/bookChapter/_form.gsp | 2 +- grails-app/views/dissertacao/_form.gsp | 4 ++-- grails-app/views/ferramenta/_form.gsp | 2 +- grails-app/views/technicalReport/_form.gsp | 2 +- 7 files changed, 30 insertions(+), 9 deletions(-) diff --git a/ProductGeneration/ck.xml b/ProductGeneration/ck.xml index 85f4ac34..05f95416 100644 --- a/ProductGeneration/ck.xml +++ b/ProductGeneration/ck.xml @@ -35,6 +35,10 @@ PDF createBuildEntriesPDF + +Autofill +createBuildEntriesAutofill + rgms @@ -145,6 +149,9 @@ rgmsselectAndMoveComponentthesis,grails-app/domain/rgms/publication/Tese.groovy rgmspreprocessFilesgrails-app/domain/rgms/publication/Tese.groovy +AuthselectAndMoveComponentteseOrDissertacao,grails-app/domain/rgms/publication/TeseOrDissertacao.groovy +rgmspreprocessFilesgrails-app/domain/rgms/publication/TeseOrDissertacao.groovy + rgmsselectAndMoveComponentConferenciaController,grails-app/controllers/rgms/publication/ConferenciaController.groovy @@ -264,6 +271,7 @@ +rgmsselectAndMoveComponentbookchapterForm,grails-app/views/bookChapter/_form.gsp rgmsselectAndMoveComponentferramentaFeature,test/cucumber/Ferramenta.feature rgmspreprocessFilestest/cucumber/Ferramenta.feature rgmsselectAndMoveComponentbookchapterFeature,test/cucumber/BookChapter.feature diff --git a/ProductGeneration/compModelTeste.txt b/ProductGeneration/compModelTeste.txt index a3ef4b13..1ebfdade 100644 --- a/ProductGeneration/compModelTeste.txt +++ b/ProductGeneration/compModelTeste.txt @@ -10,6 +10,8 @@ resetPassword => grailsapp/views/auth/resetPassword.gsp; updatePassword => grailsapp/views/auth/updatePassword.gsp; register => grailsapp/views/auth/register.gsp; +bookchapterForm => grailsapp/views/bookChapter/form.gsp; + conferenciaForm => grailsapp/views/conferencia/form.gsp; conferenciaCreate => grailsapp/views/conferencia/create.gsp; conferenciaEdit => grailsapp/views/conferencia/edit.gsp; @@ -116,6 +118,7 @@ researchGroup => grailsapp/domain/rgms/member/ResearchGroup.groovy; Role => grailsapp/domain/rgms/authentication/Role.groovy; thesis => grailsapp/domain/rgms/publication/Tese.groovy; researchLine => grailsapp/domain/rgms/publication/ResearchLine.groovy; +teseOrDissertacao => grailsapp/domain/rgms/publication/TeseOrDissertacao.groovy; ApplicationResources => grailsapp/conf/ApplicationResources.groovy; @@ -194,14 +197,14 @@ bookchapterFeature => test/cucumber/BookChapter.feature; dissertacaoFeature => test/cucumber/Dissertacao.feature; conferenciaFeature => test/cucumber/Conferencia.feature; technicalreportFeature => test/cucumber/TechnicalReport.feature; - + testFunctionalFormPage => test/functional/pages/FormPage.groovy; testFunctionalTechnicalReportCreatePage => test/functional/pages/TechnicalReportCreatePage.groovy; testFunctionalFerramentaCreate => test/functional/pages/FerramentaCreate.groovy; testFunctionalDissertationCreate => test/functional/pages/DissertationCreate.groovy; testFunctionalBookChapterCreatePage => test/functional/pages/BookChapterCreatePage.groovy; testFunctionalConferenciaCreatePage => test/functional/pages/ConferenciaCreatePage.groovy; - + bibtexParse => grailsapp/domain/rgms/publication/BibtexParse.groovy; bibtexFile => grailsapp/domain/rgms/publication/BibtexFile.groovy; bibtexFileController => grailsapp/controllers/rgms/publication/BibtexFileController.groovy; @@ -212,5 +215,5 @@ bibtexImportSteps => test/cucumber/steps/BibtexImportSteps.groovy; strategyParse => grailsapp/domain/rgms/publication/strategyBibtexParse/StrategyParse.java; strategyParseDissertacao => grailsapp/domain/rgms/publication/strategyBibtexParse/StrategyParseDissertacao.java; strategyParseTese => grailsapp/domain/rgms/publication/strategyBibtexParse/StrategyParseTese.java; - - + + diff --git a/grails-app/domain/rgms/publication/TeseOrDissertacao.groovy b/grails-app/domain/rgms/publication/TeseOrDissertacao.groovy index a9cb1619..c17e78ec 100644 --- a/grails-app/domain/rgms/publication/TeseOrDissertacao.groovy +++ b/grails-app/domain/rgms/publication/TeseOrDissertacao.groovy @@ -1,5 +1,7 @@ package rgms.publication +import rgms.member.Member + abstract class TeseOrDissertacao extends Publication{ String school @@ -9,4 +11,12 @@ abstract class TeseOrDissertacao extends Publication{ school nullable: false, blank: false address nullable: false, blank: false } + + public Set schoolSelected(loggedUsername) { +//#if ($Autofill) + return school ? school : [ Member.findByUsername(loggedUsername).university ]; +//#else + return school; +//#end + } } diff --git a/grails-app/views/bookChapter/_form.gsp b/grails-app/views/bookChapter/_form.gsp index 6299c23d..67bd6df9 100644 --- a/grails-app/views/bookChapter/_form.gsp +++ b/grails-app/views/bookChapter/_form.gsp @@ -57,7 +57,7 @@ * + value="${bookChapterInstance?.membersSelected(SecurityUtils.subject?.principal)}" /> diff --git a/grails-app/views/dissertacao/_form.gsp b/grails-app/views/dissertacao/_form.gsp index 07d35cc9..bc3ca9bd 100644 --- a/grails-app/views/dissertacao/_form.gsp +++ b/grails-app/views/dissertacao/_form.gsp @@ -40,7 +40,7 @@ * - +
    @@ -58,7 +58,7 @@ + value="${dissertacaoInstance?.membersSelected(SecurityUtils.subject?.principal)}" />
    diff --git a/grails-app/views/ferramenta/_form.gsp b/grails-app/views/ferramenta/_form.gsp index 50046f49..7392f8ec 100644 --- a/grails-app/views/ferramenta/_form.gsp +++ b/grails-app/views/ferramenta/_form.gsp @@ -58,7 +58,7 @@ + value="${ferramentaInstance?.membersSelected(SecurityUtils.subject?.principal)}" /> diff --git a/grails-app/views/technicalReport/_form.gsp b/grails-app/views/technicalReport/_form.gsp index 3cf203f3..be1bf96d 100644 --- a/grails-app/views/technicalReport/_form.gsp +++ b/grails-app/views/technicalReport/_form.gsp @@ -50,7 +50,7 @@ + value="${technicalReportInstance?.membersSelected(SecurityUtils.subject?.principal)}" /> From e94267cf5799f34bcaf68cb21035281481f5f731 Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Tue, 2 Jul 2013 12:35:49 -0300 Subject: [PATCH 28/32] Evoluindo a Linha de Produtos: mais refatoramento em Autofill --- grails-app/domain/rgms/publication/Publication.groovy | 4 +++- grails-app/domain/rgms/publication/TeseOrDissertacao.groovy | 6 ++++-- grails-app/views/bookChapter/_form.gsp | 4 +--- grails-app/views/conferencia/_form.gsp | 3 +-- grails-app/views/dissertacao/_form.gsp | 5 ++--- grails-app/views/ferramenta/_form.gsp | 3 +-- grails-app/views/technicalReport/_form.gsp | 3 +-- 7 files changed, 13 insertions(+), 15 deletions(-) diff --git a/grails-app/domain/rgms/publication/Publication.groovy b/grails-app/domain/rgms/publication/Publication.groovy index 0d9ecddf..a196d624 100644 --- a/grails-app/domain/rgms/publication/Publication.groovy +++ b/grails-app/domain/rgms/publication/Publication.groovy @@ -1,6 +1,7 @@ package rgms.publication import rgms.member.Member +import org.apache.shiro.SecurityUtils abstract class Publication { @@ -63,8 +64,9 @@ abstract class Publication { return result; } - public Set membersSelected(loggedUsername) { + public Set membersSelected() { //#if ($Autofill) + def loggedUsername = SecurityUtils.subject?.principal; return members ? members : [ Member.findByUsername(loggedUsername).id ]; //#else return members; diff --git a/grails-app/domain/rgms/publication/TeseOrDissertacao.groovy b/grails-app/domain/rgms/publication/TeseOrDissertacao.groovy index c17e78ec..81145c79 100644 --- a/grails-app/domain/rgms/publication/TeseOrDissertacao.groovy +++ b/grails-app/domain/rgms/publication/TeseOrDissertacao.groovy @@ -1,6 +1,7 @@ package rgms.publication import rgms.member.Member +import org.apache.shiro.SecurityUtils abstract class TeseOrDissertacao extends Publication{ @@ -12,9 +13,10 @@ abstract class TeseOrDissertacao extends Publication{ address nullable: false, blank: false } - public Set schoolSelected(loggedUsername) { + public String schoolSelected() { //#if ($Autofill) - return school ? school : [ Member.findByUsername(loggedUsername).university ]; + def loggedUsername = SecurityUtils.subject?.principal; + return school ? school : Member.findByUsername(loggedUsername).university; //#else return school; //#end diff --git a/grails-app/views/bookChapter/_form.gsp b/grails-app/views/bookChapter/_form.gsp index 67bd6df9..e10194a9 100644 --- a/grails-app/views/bookChapter/_form.gsp +++ b/grails-app/views/bookChapter/_form.gsp @@ -1,7 +1,5 @@ <%@page import="rgms.member.Member"%> <%@ page import="rgms.publication.BookChapter" %> -<%@ page import="org.apache.shiro.SecurityUtils" %> -
    @@ -57,7 +55,7 @@ * + value="${bookChapterInstance?.membersSelected()}" />
    diff --git a/grails-app/views/conferencia/_form.gsp b/grails-app/views/conferencia/_form.gsp index 425eb637..eaeb6d57 100644 --- a/grails-app/views/conferencia/_form.gsp +++ b/grails-app/views/conferencia/_form.gsp @@ -1,6 +1,5 @@ <%@page import="rgms.member.Member"%> <%@ page import="rgms.publication.Conferencia" %> -<%@ page import="org.apache.shiro.SecurityUtils" %>
    @@ -58,7 +57,7 @@ + value="${conferenciaInstance?.membersSelected()}" />
    diff --git a/grails-app/views/dissertacao/_form.gsp b/grails-app/views/dissertacao/_form.gsp index bc3ca9bd..890c992f 100644 --- a/grails-app/views/dissertacao/_form.gsp +++ b/grails-app/views/dissertacao/_form.gsp @@ -1,6 +1,5 @@ <%@page import="rgms.member.Member"%> <%@ page import="rgms.publication.Dissertacao" %> -<%@ page import="org.apache.shiro.SecurityUtils" %>
    @@ -40,7 +39,7 @@ * - +
    @@ -58,7 +57,7 @@ + value="${dissertacaoInstance?.membersSelected()}" />
    diff --git a/grails-app/views/ferramenta/_form.gsp b/grails-app/views/ferramenta/_form.gsp index 7392f8ec..c16ac0d7 100644 --- a/grails-app/views/ferramenta/_form.gsp +++ b/grails-app/views/ferramenta/_form.gsp @@ -1,6 +1,5 @@ <%@page import="rgms.member.Member"%> <%@ page import="rgms.publication.Ferramenta" %> -<%@ page import="org.apache.shiro.SecurityUtils" %>
    @@ -58,7 +57,7 @@ + value="${ferramentaInstance?.membersSelected()}" />
    diff --git a/grails-app/views/technicalReport/_form.gsp b/grails-app/views/technicalReport/_form.gsp index be1bf96d..86802b94 100644 --- a/grails-app/views/technicalReport/_form.gsp +++ b/grails-app/views/technicalReport/_form.gsp @@ -1,6 +1,5 @@ <%@page import="rgms.member.Member"%> <%@ page import="rgms.publication.TechnicalReport" %> -<%@ page import="org.apache.shiro.SecurityUtils" %>
    @@ -50,7 +49,7 @@ + value="${technicalReportInstance?.membersSelected()}" />
    From 8967d24aab4a1e11a00d704e41ee9c9380e6e797 Mon Sep 17 00:00:00 2001 From: diogovss Date: Tue, 2 Jul 2013 19:20:45 -0300 Subject: [PATCH 29/32] =?UTF-8?q?=C3=9Altimo=20commit:=20Ajustes=20no=20ck?= =?UTF-8?q?,=20featureModel=20e=20instanceModel=20para=20colocar=20uma=20p?= =?UTF-8?q?ublica=C3=A7=C3=A3o=20(Tese)=20como=20opcional=20e=20deixar=20a?= =?UTF-8?q?=20feature=20ImportBibtex=20dependente=20da=20feature=20TesePub?= =?UTF-8?q?lication.=20Al=C3=A9m=20disso=20inclus=C3=A3o=20de=20compila?= =?UTF-8?q?=C3=A7=C3=A3o=20condicional=20em=20BibtexParse=20para=20s=C3=B3?= =?UTF-8?q?=20fazer=20a=20importa=C3=A7=C3=A3o=20de=20uma=20tese,=20caso?= =?UTF-8?q?=20as=20features=20ImportBibtex=20E=20TesePublication=20tenham?= =?UTF-8?q?=20sido=20selecionadas.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProductGeneration/ck.xml | 27 +++++++++++++++---- ProductGeneration/featureModel.xml | 2 ++ .../hephaestus/project.properties | 12 ++++----- ProductGeneration/instanceModel.xml | 2 ++ .../rgms/publication/BibtexParse.groovy | 2 ++ grails-app/views/initial.gsp | 4 ++- 6 files changed, 37 insertions(+), 12 deletions(-) diff --git a/ProductGeneration/ck.xml b/ProductGeneration/ck.xml index 05f95416..7a53b0b3 100644 --- a/ProductGeneration/ck.xml +++ b/ProductGeneration/ck.xml @@ -146,8 +146,8 @@ AuthselectAndMoveComponentRole,grails-app/domain/rgms/authentication/Role.groovy -rgmsselectAndMoveComponentthesis,grails-app/domain/rgms/publication/Tese.groovy -rgmspreprocessFilesgrails-app/domain/rgms/publication/Tese.groovy +And (rgms,TesePublication)selectAndMoveComponentthesis,grails-app/domain/rgms/publication/Tese.groovy +And (rgms,TesePublication)preprocessFilesgrails-app/domain/rgms/publication/Tese.groovy AuthselectAndMoveComponentteseOrDissertacao,grails-app/domain/rgms/publication/TeseOrDissertacao.groovy rgmspreprocessFilesgrails-app/domain/rgms/publication/TeseOrDissertacao.groovy @@ -175,8 +175,8 @@ rgmsselectAndMoveComponentResearchGroupController,grails-app/controllers/rgms/member/ResearchGroupController.groovy rgmspreprocessFilesgrails-app/controllers/rgms/member/ResearchGroupController.groovy -rgmsselectAndMoveComponentTeseController,grails-app/controllers/rgms/publication/TeseController.groovy -rgmspreprocessFilesgrails-app/controllers/rgms/publication/TeseController.groovy +And (rgms,TesePublication)selectAndMoveComponentTeseController,grails-app/controllers/rgms/publication/TeseController.groovy +And (rgms,TesePublication)preprocessFilesgrails-app/controllers/rgms/publication/TeseController.groovy AuthselectAndMoveComponentAuthController,grails-app/controllers/rgms/authentication/AuthController.groovy @@ -207,6 +207,23 @@ bibtexParse,grails-app/domain/rgms/publication/BibtexParse.groovy + + + ImportBibtex + + selectAndMoveComponent + bibtexParse,grails-app/domain/rgms/publication/BibtexParse.groovy + + + + + ImportBibtex + + preprocessFiles + grails-app/domain/rgms/publication/BibtexParse.groovy + + + ImportBibtex @@ -264,7 +281,7 @@ - ImportBibtex + And (ImportBibtex,TesePublication) selectAndMoveComponent strategyParseTese,grails-app/domain/rgms/publication/strategyBibtexParse/StrategyParseTese.java diff --git a/ProductGeneration/featureModel.xml b/ProductGeneration/featureModel.xml index ef01c017..6ba9a3a6 100644 --- a/ProductGeneration/featureModel.xml +++ b/ProductGeneration/featureModel.xml @@ -6,6 +6,8 @@ + + diff --git a/ProductGeneration/hephaestus/project.properties b/ProductGeneration/hephaestus/project.properties index 680b2226..178d3739 100644 --- a/ProductGeneration/hephaestus/project.properties +++ b/ProductGeneration/hephaestus/project.properties @@ -1,7 +1,7 @@ name=rgms -feature-model=C:\spl\final\rgms\ProductGeneration/featureModel.xml -configuration-model=C:\spl\final\rgms\ProductGeneration/ck.xml -instance-model=C:\spl\final\rgms\ProductGeneration/instanceModel.xml -component-model=C:\spl\final\rgms\ProductGeneration/compModelTeste.txt -source-dir=C:\spl\final\rgmsMiddleware -target-dir=C:\spl\final\rgmsProcessed \ No newline at end of file +feature-model=C:\spl\ultimate\rgms\ProductGeneration/featureModel.xml +configuration-model=C:\spl\ultimate\rgms\ProductGeneration/ck.xml +instance-model=C:\spl\ultimate\rgms\ProductGeneration/instanceModel.xml +component-model=C:\spl\ultimate\rgms\ProductGeneration/compModelTeste.txt +source-dir=C:\spl\ultimate\rgmsUltimateMiddleware +target-dir=C:\spl\ultimate\rgmsGenerated \ No newline at end of file diff --git a/ProductGeneration/instanceModel.xml b/ProductGeneration/instanceModel.xml index 7c33a9d2..e230c73b 100644 --- a/ProductGeneration/instanceModel.xml +++ b/ProductGeneration/instanceModel.xml @@ -6,6 +6,8 @@ + + diff --git a/grails-app/domain/rgms/publication/BibtexParse.groovy b/grails-app/domain/rgms/publication/BibtexParse.groovy index 87e95d47..34640439 100644 --- a/grails-app/domain/rgms/publication/BibtexParse.groovy +++ b/grails-app/domain/rgms/publication/BibtexParse.groovy @@ -56,9 +56,11 @@ class BibtexParse { else if (entry.getType().equals(BibTeXEntry.TYPE_MISC)) { } + //#if($ImportBibtex && $TesePublication) else if (entry.getType().equals(BibTeXEntry.TYPE_PHDTHESIS)) { publications.add(new StrategyParseTese().execute(entry)) } + //#end else if (entry.getType().equals(BibTeXEntry.TYPE_PROCEEDINGS)) { } diff --git a/grails-app/views/initial.gsp b/grails-app/views/initial.gsp index c6612c95..7ce9ec1c 100644 --- a/grails-app/views/initial.gsp +++ b/grails-app/views/initial.gsp @@ -143,9 +143,11 @@
  • Periodico
  • Linha de pesquisa
  • Technical Report
  • +
  • Tese
  • +
  • Orientation
  • - +
  • Import Bibtex File
  • From 96a6eb1435a986008053417fb574a1c98715a784 Mon Sep 17 00:00:00 2001 From: diogovss Date: Tue, 2 Jul 2013 19:25:35 -0300 Subject: [PATCH 30/32] do commit anterior. --- ProductGeneration/ck.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/ProductGeneration/ck.xml b/ProductGeneration/ck.xml index 7a53b0b3..604be3c4 100644 --- a/ProductGeneration/ck.xml +++ b/ProductGeneration/ck.xml @@ -207,15 +207,6 @@ bibtexParse,grails-app/domain/rgms/publication/BibtexParse.groovy
    - - - ImportBibtex - - selectAndMoveComponent - bibtexParse,grails-app/domain/rgms/publication/BibtexParse.groovy - - - ImportBibtex From 35b56a0fa0468494b5f166de51bd8b3ef18bab1e Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Thu, 4 Jul 2013 12:10:45 -0300 Subject: [PATCH 31/32] Corrige CK para indicar um arquivo pra ser preprocessado MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Alem disso, adiciona "TesePublication" no inicio para poder habilitar a feature ImportBibtex, ja que habilitar apenas no feature e instance model não é suficiente. --- ProductGeneration/ck.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ProductGeneration/ck.xml b/ProductGeneration/ck.xml index 604be3c4..2b3c565d 100644 --- a/ProductGeneration/ck.xml +++ b/ProductGeneration/ck.xml @@ -20,6 +20,10 @@ createBuildEntriesImportBibtex +TesePublication +createBuildEntriesTesePublication + + Website createBuildEntriesWebsite @@ -136,6 +140,7 @@ rgmspreprocessFilesgrails-app/domain/rgms/publication/Periodico.groovy rgmsselectAndMoveComponentmemberShip,grails-app/domain/rgms/member/Membership.groovy +rgmspreprocessFilesgrails-app/domain/rgms/member/Membership.groovy HistoryselectAndMoveComponenthistory,grails-app/domain/rgms/member/Record.groovy From cae73b215783e5dc6d1c5d25a524aa96ed765e5d Mon Sep 17 00:00:00 2001 From: Rafael Brandao Date: Sun, 7 Jul 2013 23:15:42 -0300 Subject: [PATCH 32/32] Adiciona diretiva de preprocessamento em arquivos com ifdef MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Além disso, alguns arquivos navigation não estavam mapeados no ck e foram adicionados ao component model e CK. --- ProductGeneration/ck.xml | 8 ++++++++ ProductGeneration/compModelTeste.txt | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ProductGeneration/ck.xml b/ProductGeneration/ck.xml index 2b3c565d..2b4e7649 100644 --- a/ProductGeneration/ck.xml +++ b/ProductGeneration/ck.xml @@ -70,6 +70,7 @@ rgmsselectAndMoveComponentconferenciaCreate,grails-app/views/conferencia/create.gsp rgmsselectAndMoveComponentconferenciaEdit,grails-app/views/conferencia/edit.gsp rgmsselectAndMoveComponentconferenciaList,grails-app/views/conferencia/list.gsp +rgmspreprocessFilesgrails-app/views/conferencia/list.gsp rgmsselectAndMoveComponentconferenciaShow,grails-app/views/conferencia/show.gsp @@ -78,6 +79,8 @@ rgmsselectAndMoveComponentcreateDissertation,grails-app/views/dissertacao/create.gsp rgmsselectAndMoveComponenteditDissertation,grails-app/views/dissertacao/edit.gsp rgmsselectAndMoveComponentlistDissertation,grails-app/views/dissertacao/list.gsp +rgmspreprocessFilesgrails-app/views/dissertacao/list.gsp +rgmsselectAndMoveComponentnavDissertacao,grails-app/views/dissertacao/_navigation.gsp rgmsselectAndMoveComponentshowDissertation,grails-app/views/dissertacao/show.gsp @@ -85,7 +88,9 @@ rgmsselectAndMoveComponentcreateTool,grails-app/views/ferramenta/create.gsp rgmsselectAndMoveComponenteditTool,grails-app/views/ferramenta/edit.gsp rgmsselectAndMoveComponentlistTool,grails-app/views/ferramenta/list.gsp +rgmspreprocessFilesgrails-app/views/ferramenta/list.gsp rgmsselectAndMoveComponentshowTool,grails-app/views/ferramenta/show.gsp +rgmsselectAndMoveComponentnavTool,grails-app/views/ferramenta/_navigation.gsp @@ -93,6 +98,7 @@ rgmsselectAndMoveComponentcreatePeriodico,grails-app/views/periodico/create.gsp rgmsselectAndMoveComponenteditPeriodico,grails-app/views/periodico/edit.gsp rgmsselectAndMoveComponentlistPeriodico,grails-app/views/periodico/list.gsp +rgmspreprocessFilesgrails-app/views/periodico/list.gsp rgmsselectAndMoveComponentshowPeriodico,grails-app/views/periodico/show.gsp @@ -105,9 +111,11 @@ rgmsselectAndMoveComponentformResearchGroup,grails-app/views/researchGroup/_form.gsp +rgmspreprocessFilesgrails-app/views/researchGroup/_form.gsp rgmsselectAndMoveComponentcreateResearchGroup,grails-app/views/researchGroup/create.gsp rgmsselectAndMoveComponenteditResearchGroup,grails-app/views/researchGroup/edit.gsp rgmsselectAndMoveComponentlistResearchGroup,grails-app/views/researchGroup/list.gsp +rgmspreprocessFilesgrails-app/views/researchGroup/list.gsp rgmsselectAndMoveComponenteditMembersResearchGroup,grails-app/views/researchGroup/editMembers.gsp diff --git a/ProductGeneration/compModelTeste.txt b/ProductGeneration/compModelTeste.txt index 1ebfdade..331164e0 100644 --- a/ProductGeneration/compModelTeste.txt +++ b/ProductGeneration/compModelTeste.txt @@ -47,12 +47,14 @@ listDissertation => grailsapp/views/dissertacao/list.gsp; editDissertation => grailsapp/views/dissertacao/edit.gsp; createDissertation => grailsapp/views/dissertacao/create.gsp; formDissertation => grailsapp/views/dissertacao/form.gsp; +navDissertacao => grailsapp/views/dissertacao/navigation.gsp; showTool => grailsapp/views/ferramenta/show.gsp; listTool => grailsapp/views/ferramenta/list.gsp; editTool => grailsapp/views/ferramenta/edit.gsp; createTool => grailsapp/views/ferramenta/create.gsp; formTool => grailsapp/views/ferramenta/form.gsp; +navTool => grailsapp/views/ferramenta/navigation.gsp; showMembership => grailsapp/views/membership/show.gsp; listMembership => grailsapp/views/membership/list.gsp; @@ -216,4 +218,3 @@ strategyParse => grailsapp/domain/rgms/publication/strategyBibtexParse/StrategyP strategyParseDissertacao => grailsapp/domain/rgms/publication/strategyBibtexParse/StrategyParseDissertacao.java; strategyParseTese => grailsapp/domain/rgms/publication/strategyBibtexParse/StrategyParseTese.java; -