r187 - in trunk: cantharella.data/src/main/java/nc/ird/cantharella/data/model/search cantharella.service/src/main/java/nc/ird/cantharella/service/services cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/panel cantharella.web/src/main/resources
Author: echatellier Date: 2013-03-27 15:11:48 +0100 (Wed, 27 Mar 2013) New Revision: 187 Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/187 Log: Gerer la modification/suppression des documents sans passer par l'edition de l'entit?\195?\169 contenante. Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ReadDocumentPage.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/panel/ManageListDocumentsPanel.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/panel/ReadListDocumentsPanel.java trunk/cantharella.web/src/main/resources/web_en.properties trunk/cantharella.web/src/main/resources/web_fr.properties Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java =================================================================== --- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java 2013-03-27 12:42:48 UTC (rev 186) +++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java 2013-03-27 14:11:48 UTC (rev 187) @@ -97,8 +97,8 @@ } document.add(new Field("produit.lot.campagne.nom", lot.getCampagne().getNom(), luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector())); - document.add(new Field("produit.lot.campagne.codePays", lot.getCampagne().getCodePays(), luceneOptions.getStore(), - luceneOptions.getIndex(), luceneOptions.getTermVector())); + document.add(new Field("produit.lot.campagne.codePays", lot.getCampagne().getCodePays(), luceneOptions + .getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector())); // commons information for all produit List<LotPersonneDroits> personnesDroits = lot.getPersonnesDroits(); Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java 2013-03-27 12:42:48 UTC (rev 186) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java 2013-03-27 14:11:48 UTC (rev 187) @@ -28,7 +28,9 @@ import nc.ird.cantharella.data.exceptions.DataNotFoundException; import nc.ird.cantharella.data.model.Document; import nc.ird.cantharella.data.model.TypeDocument; +import nc.ird.cantharella.data.model.utils.DocumentAttachable; import nc.ird.cantharella.service.exceptions.InvalidFileExtensionException; +import nc.ird.cantharella.service.utils.normalizers.DocumentNormalizer; import nc.ird.cantharella.service.utils.normalizers.TypeDocumentNormalizer; import nc.ird.cantharella.service.utils.normalizers.UniqueFieldNormalizer; import nc.ird.cantharella.service.utils.normalizers.utils.Normalize; @@ -103,6 +105,13 @@ List<String> listDocumentContrainteLegales(); /** + * Modify a document attachable + * @param documentAttachable The document attachable to modify + * @throws DataConstraintException If an unique constraint is broken with another document + */ + void updateDocumentAttachable(DocumentAttachable documentAttachable) throws DataConstraintException; + + /** * Manage attached file data as image and image thumbnail if possible. * * @param document current document Modified: trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java =================================================================== --- trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java 2013-03-27 12:42:48 UTC (rev 186) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java 2013-03-27 14:11:48 UTC (rev 187) @@ -39,6 +39,8 @@ import nc.ird.cantharella.data.exceptions.UnexpectedException; import nc.ird.cantharella.data.model.Document; import nc.ird.cantharella.data.model.TypeDocument; +import nc.ird.cantharella.data.model.utils.AbstractModel; +import nc.ird.cantharella.data.model.utils.DocumentAttachable; import nc.ird.cantharella.service.exceptions.InvalidFileExtensionException; import nc.ird.cantharella.service.services.DocumentService; import nc.ird.cantharella.utils.AssertTools; @@ -130,6 +132,22 @@ /** {@inheritDoc} */ @Override + public void updateDocumentAttachable(DocumentAttachable documentAttachable) throws DataConstraintException { + AssertTools.assertNotNull(documentAttachable); + LOG.info("updateDocumentAttachable: " + documentAttachable.toString()); + try { + // DocumentAttachable est une interface mais toutes + // les entity qui en herite herite aussi de AbstractModel + dao.update((AbstractModel) documentAttachable); + } catch (DataNotFoundException e) { + LOG.error(e.getMessage(), e); + throw new UnexpectedException(e); + } + + } + + /** {@inheritDoc} */ + @Override @SuppressWarnings("unchecked") public List<String> listDocumentEditeurs() { List<String> result = (List<String>) dao.list(DocumentDao.CRITERIA_DISTINCT_DOCUMENT_EDITEURS); Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java 2013-03-27 12:42:48 UTC (rev 186) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java 2013-03-27 14:11:48 UTC (rev 187) @@ -77,13 +77,22 @@ */ public class ManageDocumentPage extends TemplatePage { - /** Action : create */ + /** Action : create later (delegate to entity cascade). */ + private static final String ACTION_CREATE_LATER = "CreateLater"; + + /** Action : delete later (delegate to entity cascade). */ + private static final String ACTION_DELETE_LATER = "DeleteLater"; + + /** Action : update later (delegate to entity cascade). */ + private static final String ACTION_UPDATE_LATER = "UpdateLater"; + + /** Action : create. */ private static final String ACTION_CREATE = "Create"; - /** Action : delete */ + /** Action : delete. */ private static final String ACTION_DELETE = "Delete"; - /** Action : update */ + /** Action : update. */ private static final String ACTION_UPDATE = "Update"; /** Model : document. */ @@ -104,6 +113,9 @@ /** Caller page. */ private final CallerPage callerPage; + /** Update with service flag. */ + private boolean updateWithService; + /** * Constructeur (mode création) * @param callerPage Page appelante @@ -111,7 +123,7 @@ * @param multipleEntry Saisie multiple */ public ManageDocumentPage(CallerPage callerPage, DocumentAttachable documentAttachable, boolean multipleEntry) { - this(null, documentAttachable, callerPage, multipleEntry); + this(null, documentAttachable, callerPage, multipleEntry, false); } /** @@ -119,9 +131,11 @@ * @param document document to edit * @param documentAttachable document sur le * @param callerPage Page appelante + * @param updateWithService if {@code true} should update entity with service */ - public ManageDocumentPage(Document document, DocumentAttachable documentAttachable, CallerPage callerPage) { - this(document, documentAttachable, callerPage, false); + public ManageDocumentPage(Document document, DocumentAttachable documentAttachable, CallerPage callerPage, + boolean updateWithService) { + this(document, documentAttachable, callerPage, false, updateWithService); } /** @@ -135,9 +149,10 @@ * @param multipleEntry Saisie multiple */ private ManageDocumentPage(Document document, final DocumentAttachable documentAttachable, - final CallerPage callerPage, boolean multipleEntry) { + final CallerPage callerPage, boolean multipleEntry, final boolean updateWithService) { super(ManageDocumentPage.class); this.callerPage = callerPage; + this.updateWithService = updateWithService; final CallerPage currentPage = new CallerPage(this); @@ -278,13 +293,15 @@ @Override public void onProcess() throws DataConstraintException { + // document can only be created from an attached entity Document document = documentModel.getObject(); documentAttachable.addDocument(document); } @Override public void onSuccess() { - successNextPage(ACTION_CREATE); + // document can only be created from an attached entity + successNextPage(ACTION_CREATE_LATER); redirect(); } }); @@ -295,12 +312,18 @@ Button updateButton = new SubmittableButton(ACTION_UPDATE, new SubmittableButtonEvents() { @Override public void onProcess() throws DataConstraintException { - // nothing, will be updated by cascade + if (updateWithService) { + documentService.updateDocumentAttachable(documentAttachable); + } // otherwise, nothing, will be updated by cascade } @Override public void onSuccess() { - successNextPage(ACTION_UPDATE); + if (updateWithService) { + successNextPage(ACTION_UPDATE); + } else { + successNextPage(ACTION_UPDATE_LATER); + } callerPage.responsePage((TemplatePage) getPage()); } @@ -316,13 +339,29 @@ Button deleteButton = new SubmittableButton(ACTION_DELETE, new SubmittableButtonEvents() { @Override public void onProcess() throws DataConstraintException { - documentAttachable.removeDocument(documentModel.getObject()); + Document document = documentModel.getObject(); + if (updateWithService) { + documentAttachable.removeDocument(document); + documentService.updateDocumentAttachable(documentAttachable); + } else { + // remove document from attached entity + // and save will be performed by cascade + documentAttachable.removeDocument(document); + } } @Override public void onSuccess() { - successNextPage(ACTION_DELETE); - callerPage.responsePage((TemplatePage) getPage()); + if (updateWithService) { + successNextPage(ACTION_DELETE); + // first getPage() is read document + // it has been deleted so go to previous one + callerPage.responsePage((TemplatePage) getPage().getPage()); + } else { + successNextPage(ACTION_DELETE_LATER); + callerPage.responsePage((TemplatePage) getPage()); + } + } }); deleteButton.setVisibilityAllowed(!createMode); Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ReadDocumentPage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ReadDocumentPage.java 2013-03-27 12:42:48 UTC (rev 186) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ReadDocumentPage.java 2013-03-27 14:11:48 UTC (rev 187) @@ -22,9 +22,12 @@ */ package nc.ird.cantharella.web.pages.domain.document; +import javax.inject.Inject; + import nc.ird.cantharella.data.exceptions.DataConstraintException; import nc.ird.cantharella.data.model.Document; import nc.ird.cantharella.data.model.utils.DocumentAttachable; +import nc.ird.cantharella.service.services.DocumentService; import nc.ird.cantharella.web.config.WebContext; import nc.ird.cantharella.web.pages.TemplatePage; import nc.ird.cantharella.web.pages.domain.document.panel.DocumentLinkPanel; @@ -43,6 +46,7 @@ import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.spring.injection.annot.SpringBean; /** * Document read page. @@ -51,12 +55,19 @@ */ public class ReadDocumentPage extends TemplatePage { - /** Action : delete */ + /** Action : delete later (delegate to entity cascade). */ + public static final String ACTION_DELETE_LATER = "DeleteLater"; + + /** Action : delete. */ public static final String ACTION_DELETE = "Delete"; /** Model : document */ private final IModel<Document> documentModel; + /** Service : document */ + @SpringBean + private DocumentService documentService; + /** Caller page. */ private final CallerPage callerPage; @@ -74,9 +85,10 @@ * @param document document * @param documentAttachable entity where document is attached to * @param callerPage caller page + * @param fromEditEntity page called from entity in edition mode */ public ReadDocumentPage(final Document document, final DocumentAttachable documentAttachable, - final CallerPage callerPage) { + final CallerPage callerPage, final boolean fromEditEntity) { super(ReadDocumentPage.class); this.callerPage = callerPage; final CallerPage currentPage = new CallerPage(this); @@ -120,7 +132,8 @@ .getObject())) { @Override public void onClick() { - setResponsePage(new ManageDocumentPage(getModelObject(), documentAttachable, currentPage)); + setResponsePage(new ManageDocumentPage(getModelObject(), documentAttachable, currentPage, + !fromEditEntity)); } }; formView.add(updateLink); @@ -130,11 +143,18 @@ @Override public void onProcess() throws DataConstraintException { documentAttachable.removeDocument(documentModel.getObject()); + if (!fromEditEntity) { + documentService.updateDocumentAttachable(documentAttachable); + } } @Override public void onSuccess() { - successNextPage(ManageDocumentPage.class, ACTION_DELETE); + if (!fromEditEntity) { + successNextPage(ManageDocumentPage.class, ACTION_DELETE); + } else { + successNextPage(ManageDocumentPage.class, ACTION_DELETE_LATER); + } redirect(); } }); Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/panel/ManageListDocumentsPanel.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/panel/ManageListDocumentsPanel.java 2013-03-27 12:42:48 UTC (rev 186) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/panel/ManageListDocumentsPanel.java 2013-03-27 14:11:48 UTC (rev 187) @@ -65,7 +65,8 @@ * @param documentAttachableModel entity model where documents are attached to * @param currentPage currentPage */ - public ManageListDocumentsPanel(String id, final IModel<? extends DocumentAttachable> documentAttachableModel, final CallerPage currentPage) { + public ManageListDocumentsPanel(String id, final IModel<? extends DocumentAttachable> documentAttachableModel, + final CallerPage currentPage) { super(id, documentAttachableModel); // edit mode enabled by default @@ -78,7 +79,8 @@ documentsTable.setOutputMarkupId(true); formView.add(documentsTable); - final IModel<List<Document>> listDocumentModel = new PropertyModel<List<Document>>(documentAttachableModel, "documents"); + final IModel<List<Document>> listDocumentModel = new PropertyModel<List<Document>>(documentAttachableModel, + "documents"); // Contenu tableaux provenance ListView<Document> documentsListView = new ListView<Document>("ListDocumentsPage.AttachedDocuments.List", @@ -95,7 +97,7 @@ @Override public void onClick() { ReadDocumentPage readDocumentPage = new ReadDocumentPage(documentModel.getObject(), - documentAttachableModel.getObject(), currentPage); + documentAttachableModel.getObject(), currentPage, true); readDocumentPage.setUpdateOrDeleteEnabled(updateOrDeleteEnabled); setResponsePage(readDocumentPage); } Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/panel/ReadListDocumentsPanel.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/panel/ReadListDocumentsPanel.java 2013-03-27 12:42:48 UTC (rev 186) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/panel/ReadListDocumentsPanel.java 2013-03-27 14:11:48 UTC (rev 187) @@ -52,14 +52,16 @@ * @param documentAttachableModel document attachable model * @param currentPage current page */ - public ReadListDocumentsPanel(String id, final IModel<? extends DocumentAttachable> documentAttachableModel, final CallerPage currentPage) { + public ReadListDocumentsPanel(String id, final IModel<? extends DocumentAttachable> documentAttachableModel, + final CallerPage currentPage) { super(id, documentAttachableModel); final MarkupContainer documentsTable = new WebMarkupContainer("ListDocumentsPage.AttachedDocuments.Table"); documentsTable.setOutputMarkupId(true); add(documentsTable); - final IModel<List<Document>> listDocumentModel = new PropertyModel<List<Document>>(documentAttachableModel, "documents"); + final IModel<List<Document>> listDocumentModel = new PropertyModel<List<Document>>(documentAttachableModel, + "documents"); // Contenu tableaux provenance ListView<Document> documentsListView = new ListView<Document>("ListDocumentsPage.AttachedDocuments.List", @@ -75,7 +77,8 @@ Link<Document> documentLink = new Link<Document>("Document.titre.List") { @Override public void onClick() { - setResponsePage(new ReadDocumentPage(documentModel.getObject(), documentAttachableModel.getObject(), currentPage)); + setResponsePage(new ReadDocumentPage(documentModel.getObject(), documentAttachableModel + .getObject(), currentPage, false)); } }; documentLink.add(new Label("Document.titre.Label.List", new PropertyModel<Document>(documentModel, Modified: trunk/cantharella.web/src/main/resources/web_en.properties =================================================================== --- trunk/cantharella.web/src/main/resources/web_en.properties 2013-03-27 12:42:48 UTC (rev 186) +++ trunk/cantharella.web/src/main/resources/web_en.properties 2013-03-27 14:11:48 UTC (rev 187) @@ -211,11 +211,14 @@ ManageTestBioPage.Delete.DataConstraintException=There are data linked to this biassay ManageDocumentPage=Document management -ManageDocumentPage.Create.OK=Document will be saved on form submit -ManageDocumentPage.Update.OK=Document will be updated on form submit +ManageDocumentPage.Create.OK=Document added +ManageDocumentPage.CreateLater.OK=Document will be saved on form submit +ManageDocumentPage.Update.OK=Document updated +ManageDocumentPage.UpdateLater.OK=Document will be updated on form submit +ManageDocumentPage.Delete.OK=Document deleted +ManageDocumentPage.DeleteLater.OK=Document will be deleted on form submit ManageDocumentPage.Error.notAllowedExtension=File extension not allowed ManageDocumentPage.Error.emptyFile=File is mandatory -ManageDocumentPage.Delete.OK=Document will be deleted on form submit ManageDocumentPage.Form.uploadTooLarge=Document size can't be bigger than ${maxSize} UpdateUtilisateurPage=Account management Modified: trunk/cantharella.web/src/main/resources/web_fr.properties =================================================================== --- trunk/cantharella.web/src/main/resources/web_fr.properties 2013-03-27 12:42:48 UTC (rev 186) +++ trunk/cantharella.web/src/main/resources/web_fr.properties 2013-03-27 14:11:48 UTC (rev 187) @@ -210,9 +210,12 @@ ManageTestBioPage.Delete.DataConstraintException=Il existe des données liées à ce test biologique ManageDocumentPage=Gestion d'un document -ManageDocumentPage.Create.OK=L'enregistrement du document s'effectuera à la validation du formulaire -ManageDocumentPage.Update.OK=La modification du document s'effectuera à la validation du formulaire -ManageDocumentPage.Delete.OK=La suppression du document s'effectuera à la validation du formulaire +ManageDocumentPage.Create.OK=Document ajouté +ManageDocumentPage.CreateLater.OK=L'enregistrement du document s'effectuera à la validation du formulaire +ManageDocumentPage.Update.OK=Document mis à jour +ManageDocumentPage.UpdateLater.OK=La modification du document s'effectuera à la validation du formulaire +ManageDocumentPage.Delete.OK=Document supprimé +ManageDocumentPage.DeleteLater.OK=La suppression du document s'effectuera à la validation du formulaire ManageDocumentPage.Error.notAllowedExtension=Extension de fichier non autorisée ManageDocumentPage.Error.emptyFile=Le fichier est requis ManageDocumentPage.Form.uploadTooLarge=La taille du document ne peut pas dépasser ${maxSize}
participants (1)
-
echatellier@users.forge.codelutin.com