r162 - in trunk: cantharella.data/src/main/java/nc/ird/cantharella/data/config cantharella.data/src/main/java/nc/ird/cantharella/data/model cantharella.data/src/main/java/nc/ird/cantharella/data/validation cantharella.data/src/main/resources 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/config cantharella.web/src/main/java/nc/ird/cantha
Author: echatellier Date: 2013-02-27 11:40:04 +0100 (Wed, 27 Feb 2013) New Revision: 162 Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/162 Log: Fix permission on document management. fixes #2061: Interface "Gestion d'un document" : problem with field "langue" Added: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/validation/LanguageCode.java trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/validation/LanguageCodeValidator.java Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/config/DataContext.java trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Document.java trunk/cantharella.data/src/main/resources/ValidationMessages_fr.properties 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/config/WebContext.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/campagne/ManageCampagnePage.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/lot/ManageLotPage.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ManageMoleculePage.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ReadMoleculePage.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/personne/ManagePersonnePage.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/specimen/ManageSpecimenPage.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/station/ManageStationPage.java trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/utilisateur/UpdateUtilisateurPage.java Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/config/DataContext.java =================================================================== --- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/config/DataContext.java 2013-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/config/DataContext.java 2013-02-27 10:40:04 UTC (rev 162) @@ -96,6 +96,12 @@ .getISOCountries())); /** + * Language codes + */ + public static final List<String> LANGUAGE_CODES = Collections.unmodifiableList(Arrays.asList(Locale + .getISOLanguages())); + + /** * DB connection: acquire retry attemps */ private static final int DB_CONNECTION_ACQUIRE_RETRY_ATTEMPS = 30; Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Document.java =================================================================== --- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Document.java 2013-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Document.java 2013-02-27 10:40:04 UTC (rev 162) @@ -37,7 +37,7 @@ import javax.validation.constraints.NotNull; import nc.ird.cantharella.data.model.utils.AbstractModel; -import nc.ird.cantharella.data.validation.CountryCode; +import nc.ird.cantharella.data.validation.LanguageCode; import org.hibernate.annotations.Type; import org.hibernate.validator.constraints.Length; @@ -84,7 +84,7 @@ /** Langue. */ @Length(min = 2, max = 2) - @CountryCode + @LanguageCode private String langue; /** Contrainte légale. */ Added: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/validation/LanguageCode.java =================================================================== --- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/validation/LanguageCode.java (rev 0) +++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/validation/LanguageCode.java 2013-02-27 10:40:04 UTC (rev 162) @@ -0,0 +1,57 @@ +/* + * #%L + * Cantharella :: Data + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 2013 IRD (Institut de Recherche pour le Developpement) and by respective authors (see below) + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package nc.ird.cantharella.data.validation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import javax.validation.Constraint; +import javax.validation.Payload; + +/** + * Language code constraint + * @author Eric Chatellier + */ +@Target( { ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = LanguageCodeValidator.class) +@Documented +public @interface LanguageCode { + /** + * @return Groups + */ + Class<?>[] groups() default {}; + + /** + * @return Message key + */ + String message() default "{nc.ird.cantharella.data.validation.LanguageCode.message}"; + + /** + * @return Payload + */ + Class<? extends Payload>[] payload() default {}; +} \ No newline at end of file Property changes on: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/validation/LanguageCode.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/validation/LanguageCodeValidator.java =================================================================== --- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/validation/LanguageCodeValidator.java (rev 0) +++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/validation/LanguageCodeValidator.java 2013-02-27 10:40:04 UTC (rev 162) @@ -0,0 +1,47 @@ +/* + * #%L + * Cantharella :: Data + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 2013 IRD (Institut de Recherche pour le Developpement) and by respective authors (see below) + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package nc.ird.cantharella.data.validation; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +import nc.ird.cantharella.data.config.DataContext; + +/** + * Language code validator + * @author Eric Chatellier + */ +public final class LanguageCodeValidator implements ConstraintValidator<LanguageCode, String> { + + /** {@inheritDoc} */ + @Override + public void initialize(LanguageCode annotation) { + // + } + + /** {@inheritDoc} */ + @Override + public boolean isValid(String languageCode, ConstraintValidatorContext constraintContext) { + return languageCode == null || DataContext.LANGUAGE_CODES.contains(languageCode); + } +} \ No newline at end of file Property changes on: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/validation/LanguageCodeValidator.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/cantharella.data/src/main/resources/ValidationMessages_fr.properties =================================================================== --- trunk/cantharella.data/src/main/resources/ValidationMessages_fr.properties 2013-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.data/src/main/resources/ValidationMessages_fr.properties 2013-02-27 10:40:04 UTC (rev 162) @@ -28,6 +28,7 @@ javax.validation.constraints.DecimalMin.message=doit �tre plus grand ou �gal � {value} nc.ird.cantharella.data.validation.CountryCode.message=est invalide +nc.ird.cantharella.data.validation.LanguageCode.message=est invalide nc.ird.cantharella.data.validation.Latitude.message=est invalide nc.ird.cantharella.data.validation.Longitude.message=est invalide nc.ird.cantharella.data.validation.Referentiel.message=est invalide 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-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/DocumentService.java 2013-02-27 10:40:04 UTC (rev 162) @@ -28,7 +28,6 @@ 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.Utilisateur; 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; @@ -88,23 +87,6 @@ void deleteTypeDocument(TypeDocument typeDocument) throws DataConstraintException; /** - * Load a document. - * - * @param idDocument id - * @return the corresponding document - * @throws DataNotFoundException if not found - */ - Document loadDocument(Integer idDocument) throws DataNotFoundException; - - /** - * Check if a user can update or delete a document. - * @param document document - * @param utilisateur Utilisateur - * @return TRUE si il a le droit - */ - boolean updateOrdeleteDocumentEnabled(Document document, Utilisateur utilisateur); - - /** * Editeurs already registered into documents. * * @return document's editeur 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-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/DocumentServiceImpl.java 2013-02-27 10:40:04 UTC (rev 162) @@ -36,10 +36,7 @@ import nc.ird.cantharella.data.exceptions.DataNotFoundException; import nc.ird.cantharella.data.exceptions.UnexpectedException; import nc.ird.cantharella.data.model.Document; -import nc.ird.cantharella.data.model.Extraction; import nc.ird.cantharella.data.model.TypeDocument; -import nc.ird.cantharella.data.model.Utilisateur; -import nc.ird.cantharella.data.model.Utilisateur.TypeDroit; import nc.ird.cantharella.service.services.DocumentService; import nc.ird.cantharella.utils.AssertTools; @@ -115,20 +112,6 @@ /** {@inheritDoc} */ @Override - public Document loadDocument(Integer idDocument) throws DataNotFoundException { - LOG.debug("read Document"); - return dao.read(Document.class, idDocument); - } - - /** {@inheritDoc} */ - @Override - public boolean updateOrdeleteDocumentEnabled(Document document, Utilisateur utilisateur) { - return utilisateur.getTypeDroit() == TypeDroit.ADMINISTRATEUR - || utilisateur.getIdPersonne() == document.getCreateur().getIdPersonne(); - } - - /** {@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/config/WebContext.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/config/WebContext.java 2013-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/config/WebContext.java 2013-02-27 10:40:04 UTC (rev 162) @@ -100,8 +100,18 @@ public static final Map<Locale, List<String>> COUNTRY_CODES; /** - * HTTP cache duraction + * Countries: Locale -> language code + language name (sorted by language name) */ + public static final Map<Locale, Map<String, String>> LANGUAGES; + + /** + * Country codes: Locale -> language code (sorted by country name) + */ + public static final Map<Locale, List<String>> LANGUAGE_CODES; + + /** + * HTTP cache duration + */ public static final Duration HTTP_CACHE_DURATION = Duration.days(1); /** @@ -183,7 +193,10 @@ static { Map<Locale, Map<String, String>> countries = new HashMap<Locale, Map<String, String>>(DataContext.LOCALES .size()); + Map<Locale, Map<String, String>> languages = new HashMap<Locale, Map<String, String>>(DataContext.LOCALES + .size()); Map<Locale, List<String>> countryCodes = new HashMap<Locale, List<String>>(DataContext.LOCALES.size()); + Map<Locale, List<String>> languageCodes = new HashMap<Locale, List<String>>(DataContext.LOCALES.size()); for (Locale locale : DataContext.LOCALES) { // Build (country code + country name) list List<Pair<String, Pair<String, String>>> sortedCountryList = new ArrayList<Pair<String, Pair<String, String>>>( @@ -193,6 +206,14 @@ sortedCountryList.add(new Pair<String, Pair<String, String>>(countryCode, new Pair<String, String>( StringTools.replaceAccents(countryName), countryName))); } + // Build (country code + language name) list + List<Pair<String, Pair<String, String>>> sortedLanguageList = new ArrayList<Pair<String, Pair<String, String>>>( + DataContext.LANGUAGE_CODES.size()); + for (String languageCode : DataContext.LANGUAGE_CODES) { + String languageName = new Locale(languageCode, locale.getCountry()).getDisplayLanguage(locale); + sortedLanguageList.add(new Pair<String, Pair<String, String>>(languageCode, new Pair<String, String>( + StringTools.replaceAccents(languageName), languageName))); + } // Sort by name (country code + country name) list Collections.sort(sortedCountryList, new Comparator<Pair<String, Pair<String, String>>>() { @Override @@ -200,8 +221,13 @@ return String.CASE_INSENSITIVE_ORDER.compare(pair1.getValue().getKey(), pair2.getValue().getKey()); } }); - // Build (locale -> (country code + country name)) map (sorted by - // name) + Collections.sort(sortedLanguageList, new Comparator<Pair<String, Pair<String, String>>>() { + @Override + public int compare(Pair<String, Pair<String, String>> pair1, Pair<String, Pair<String, String>> pair2) { + return String.CASE_INSENSITIVE_ORDER.compare(pair1.getValue().getKey(), pair2.getValue().getKey()); + } + }); + // Build (locale -> (country code + country name)) map (sorted by name) // Build (locale -> (country code)) map (sorted by name) Map<String, String> sortedCountryMap = new LinkedHashMap<String, String>(sortedCountryList.size()); List<String> sortedCountryCodesList = new ArrayList<String>(sortedCountryList.size()); @@ -211,9 +237,21 @@ } countries.put(locale, Collections.unmodifiableMap(sortedCountryMap)); countryCodes.put(locale, Collections.unmodifiableList(sortedCountryCodesList)); + // Build (locale -> (language code + language name)) map (sorted by name) + // Build (locale -> (language code)) map (sorted by name) + Map<String, String> sortedLanguageMap = new LinkedHashMap<String, String>(sortedCountryList.size()); + List<String> sortedLanguageCodesList = new ArrayList<String>(sortedCountryList.size()); + for (Pair<String, Pair<String, String>> languagePair : sortedLanguageList) { + sortedLanguageMap.put(languagePair.getKey(), languagePair.getValue().getValue()); + sortedLanguageCodesList.add(languagePair.getKey()); + } + languages.put(locale, Collections.unmodifiableMap(sortedLanguageMap)); + languageCodes.put(locale, Collections.unmodifiableList(sortedLanguageCodesList)); } COUNTRIES = Collections.unmodifiableMap(countries); COUNTRY_CODES = Collections.unmodifiableMap(countryCodes); + LANGUAGES = Collections.unmodifiableMap(languages); + LANGUAGE_CODES = Collections.unmodifiableMap(languageCodes); } /** Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/campagne/ManageCampagnePage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/campagne/ManageCampagnePage.java 2013-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/campagne/ManageCampagnePage.java 2013-02-27 10:40:04 UTC (rev 162) @@ -264,6 +264,9 @@ // add list document panel ManageListDocumentsPanel manageListDocumentsPanel = new ManageListDocumentsPanel("ManageListDocumentsPanel", campagneModel, currentPage); + manageListDocumentsPanel.setUpdateOrDeleteEnabled(createMode + || campagneService.updateOrdeleteCampagneEnabled(campagneModel.getObject(), getSession() + .getUtilisateur())); formView.add(manageListDocumentsPanel); // Action : création de la campagne 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-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ManageDocumentPage.java 2013-02-27 10:40:04 UTC (rev 162) @@ -33,6 +33,8 @@ import nc.ird.cantharella.data.validation.utils.ModelValidator; import nc.ird.cantharella.service.services.DocumentService; import nc.ird.cantharella.service.services.PersonneService; +import nc.ird.cantharella.utils.CollectionTools; +import nc.ird.cantharella.utils.BeanTools.AccessType; import nc.ird.cantharella.web.config.WebApplicationImpl; import nc.ird.cantharella.web.config.WebContext; import nc.ird.cantharella.web.pages.TemplatePage; @@ -133,8 +135,7 @@ * @param multipleEntry Saisie multiple */ private ManageDocumentPage(Document document, final IModel<? extends DocumentAttachable> documentAttachableModel, - final CallerPage callerPage, - boolean multipleEntry) { + final CallerPage callerPage, boolean multipleEntry) { super(ManageDocumentPage.class); this.callerPage = callerPage; @@ -145,7 +146,7 @@ // Initialisation du modèle documentModel = new Model<Document>(document == null ? new Document() : document); - + boolean createMode = document == null; if (createMode) { documentModel.getObject().setCreateur(getSession().getUtilisateur()); @@ -158,17 +159,20 @@ List<String> editeurs = documentService.listDocumentEditeurs(); List<String> containteLegales = documentService.listDocumentContrainteLegales(); + if (document != null) { + // qd saisie multiple avec préremplissage, hack nécessaire afin d'avoir dans le model le même objet que + // celui de la liste de choix (sinon comme les objets viennent de sessions hibernate différentes, on n'a pas + // l'égalité entre les objets) + documentModel.getObject().setCreateur( + CollectionTools.findWithValue(personnes, "idPersonne", AccessType.GETTER, documentModel.getObject() + .getCreateur().getIdPersonne())); + } + // champ fichier final FileUploadField fileUploadField = new FileUploadField("Document.file"); // initialisation du formulaire wicket - final Form<Void> formView = new Form<Void>("ManageDocumentPage.Form") { - @Override - protected void onSubmit() { - super.onSubmit(); - - } - }; + final Form<Void> formView = new Form<Void>("ManageDocumentPage.Form"); formView.setMultiPart(true); formView.setMaxSize(Bytes.megabytes(documentMaxUploadSize)); @@ -206,8 +210,8 @@ "description"))); formView.add(new DropDownChoice<String>("Document.langue", new PropertyModel<String>(documentModel, "langue"), - WebContext.COUNTRY_CODES.get(getSession().getLocale()), new MapChoiceRenderer<String, String>( - WebContext.COUNTRIES.get(getSession().getLocale())))); + WebContext.LANGUAGE_CODES.get(getSession().getLocale()), new MapChoiceRenderer<String, String>( + WebContext.LANGUAGES.get(getSession().getLocale())))); AutoCompleteTextFieldString containteLegalesInput = new AutoCompleteTextFieldString( "Document.contrainteLegale", new PropertyModel<String>(documentModel, "contrainteLegale"), @@ -292,9 +296,7 @@ validateModel(); } }); - updateButton.setVisibilityAllowed(!createMode - && documentService.updateOrdeleteDocumentEnabled(documentModel.getObject(), getSession() - .getUtilisateur())); + updateButton.setVisibilityAllowed(!createMode); formView.add(updateButton); // Action : suppression du document @@ -310,9 +312,7 @@ callerPage.responsePage((TemplatePage) getPage()); } }); - deleteButton.setVisibilityAllowed(!createMode - && documentService.updateOrdeleteDocumentEnabled(documentModel.getObject(), getSession() - .getUtilisateur())); + deleteButton.setVisibilityAllowed(!createMode); deleteButton.add(new JSConfirmationBehavior(getString("Confirm"))); deleteButton.setDefaultFormProcessing(false); formView.add(deleteButton); 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-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/ReadDocumentPage.java 2013-02-27 10:40:04 UTC (rev 162) @@ -25,6 +25,7 @@ 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.web.config.WebContext; import nc.ird.cantharella.web.pages.TemplatePage; import nc.ird.cantharella.web.pages.domain.document.panel.DocumentLinkPanel; import nc.ird.cantharella.web.pages.domain.lot.ManageLotPage; @@ -33,6 +34,7 @@ import nc.ird.cantharella.web.utils.behaviors.ReplaceEmptyLabelBehavior; import nc.ird.cantharella.web.utils.forms.SubmittableButton; import nc.ird.cantharella.web.utils.forms.SubmittableButtonEvents; +import nc.ird.cantharella.web.utils.models.DisplayMapValuePropertyModel; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Button; @@ -58,6 +60,15 @@ /** Caller page. */ private final CallerPage callerPage; + /** Update or delete enabled flag. */ + protected boolean updateOrDeleteEnabled; + + /** Update link. */ + protected Link<Document> updateLink; + + /** Delete button. */ + protected Button deleteButton; + /** * Constructeur * @param document document @@ -83,8 +94,8 @@ .add(new ReplaceEmptyLabelBehavior())); add(new Label("Document.description", new PropertyModel<String>(documentModel, "description")) .add(new ReplaceEmptyLabelBehavior())); - add(new Label("Document.langue", new PropertyModel<String>(documentModel, "langue")) - .add(new ReplaceEmptyLabelBehavior())); + add(new Label("Document.langue", new DisplayMapValuePropertyModel<String>(documentModel, "langue", + WebContext.LANGUAGES.get(getSession().getLocale()))).add(new ReplaceEmptyLabelBehavior())); add(new Label("Document.contrainteLegale", new PropertyModel<String>(documentModel, "contrainteLegale")) .add(new ReplaceEmptyLabelBehavior())); add(new Label("Document.ajoutePar", new PropertyModel<String>(documentModel, "ajoutePar")) @@ -105,19 +116,17 @@ final Form<Void> formView = new Form<Void>("Form"); // Action : mise à jour (redirection vers le formulaire) - Link<Document> updateLink = new Link<Document>(getResource() + ".Document.Update", new Model<Document>( - documentModel.getObject())) { + updateLink = new Link<Document>(getResource() + ".Document.Update", new Model<Document>(documentModel + .getObject())) { @Override public void onClick() { setResponsePage(new ManageDocumentPage(getModelObject(), documentAttachableModel, currentPage)); } }; - //FIXME updateLink.setVisibilityAllowed(documentService.updateOrdeleteDocumentEnabled(documentModel.getObject(), getSession() - // .getUtilisateur())); formView.add(updateLink); // Action : suppression - Button deleteButton = new SubmittableButton(ACTION_DELETE, ManageLotPage.class, new SubmittableButtonEvents() { + deleteButton = new SubmittableButton(ACTION_DELETE, ManageLotPage.class, new SubmittableButtonEvents() { @Override public void onProcess() throws DataConstraintException { documentAttachableModel.getObject().removeDocument(documentModel.getObject()); @@ -129,8 +138,6 @@ redirect(); } }); - // FIXME deleteButton.setVisibilityAllowed(documentService.updateOrdeleteDocumentEnabled(documentModel.getObject(), getSession() - // .getUtilisateur())); deleteButton.add(new JSConfirmationBehavior(getString("Confirm"))); deleteButton.setDefaultFormProcessing(false); formView.add(deleteButton); @@ -151,4 +158,16 @@ private void redirect() { callerPage.responsePage(this); } + + /** + * Modify update or delete enabled property. + * + * @param updateOrDeleteEnabled update or delete enabled property + */ + public void setUpdateOrDeleteEnabled(boolean updateOrDeleteEnabled) { + this.updateOrDeleteEnabled = updateOrDeleteEnabled; + + updateLink.setVisibilityAllowed(updateOrDeleteEnabled); + deleteButton.setVisibilityAllowed(updateOrDeleteEnabled); + } } 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-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/document/panel/ManageListDocumentsPanel.java 2013-02-27 10:40:04 UTC (rev 162) @@ -53,6 +53,12 @@ */ public final class ManageListDocumentsPanel extends Panel { + /** Document edit enabled flag. */ + protected boolean updateOrDeleteEnabled; + + /** New Document link (for disable). */ + protected AjaxSubmitLink newDocumentLink; + /** * Constructeur. * @param id ID @@ -62,6 +68,8 @@ public ManageListDocumentsPanel(String id, final IModel<? extends DocumentAttachable> documentAttachableModel, final CallerPage currentPage) { super(id); + // edit mode enabled by default + this.updateOrDeleteEnabled = true; Form<Void> formView = new Form<Void>("form"); add(formView); @@ -87,8 +95,10 @@ Link<Document> documentLink = new Link<Document>("Document.titre.List") { @Override public void onClick() { - setResponsePage(new ReadDocumentPage(documentModel.getObject(), documentAttachableModel, - currentPage)); + ReadDocumentPage readDocumentPage = new ReadDocumentPage(documentModel.getObject(), + documentAttachableModel, currentPage); + readDocumentPage.setUpdateOrDeleteEnabled(updateOrDeleteEnabled); + setResponsePage(readDocumentPage); } }; documentLink.add(new Label("Document.titre.Label.List", new PropertyModel<Document>(documentModel, @@ -110,12 +120,12 @@ target.add(documentsTable); } } - }); + }.setEnabled(updateOrDeleteEnabled)); } }; documentsTable.add(documentsListView); - documentsTable.add(new AjaxSubmitLink("NewDocument") { + newDocumentLink = new AjaxSubmitLink("NewDocument") { @Override protected void onSubmit(AjaxRequestTarget request, Form<?> form) { setResponsePage(new ManageDocumentPage(currentPage, documentAttachableModel, false)); @@ -126,6 +136,18 @@ protected void onError(AjaxRequestTarget target, Form<?> form) { setResponsePage(new ManageDocumentPage(currentPage, documentAttachableModel, false)); } - }.setVisibilityAllowed(true)); + }; + documentsTable.add(newDocumentLink); } + + /** + * Modify update or delete enabled property. + * + * @param updateOrDeleteEnabled update or delete enabled property + */ + public void setUpdateOrDeleteEnabled(boolean updateOrDeleteEnabled) { + this.updateOrDeleteEnabled = updateOrDeleteEnabled; + + newDocumentLink.setVisibilityAllowed(updateOrDeleteEnabled); + } } Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/lot/ManageLotPage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/lot/ManageLotPage.java 2013-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/lot/ManageLotPage.java 2013-02-27 10:40:04 UTC (rev 162) @@ -295,6 +295,8 @@ // add list document panel ManageListDocumentsPanel manageListDocumentsPanel = new ManageListDocumentsPanel("ManageListDocumentsPanel", lotModel, currentPage); + manageListDocumentsPanel.setUpdateOrDeleteEnabled(createMode + || lotService.updateOrdeleteLotEnabled(lotModel.getObject(), getSession().getUtilisateur())); formView.add(manageListDocumentsPanel); // Action : création du lot Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ManageMoleculePage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ManageMoleculePage.java 2013-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ManageMoleculePage.java 2013-02-27 10:40:04 UTC (rev 162) @@ -187,15 +187,15 @@ // but molecule fields can be edited only by administrators or // molecule creator Utilisateur utilisateur = getSession().getUtilisateur(); - boolean editEnabled = createMode + boolean updateOrDeleteEnabled = createMode || moleculeService.updateOrdeleteMoleculeEnabled(moleculeModel.getObject(), utilisateur); formView.add(new TextField<String>("Molecule.nomCommun", new PropertyModel<String>(moleculeModel, "nomCommun")) - .setEnabled(editEnabled)); + .setEnabled(updateOrDeleteEnabled)); formView.add(new TextField<String>("Molecule.familleChimique", new PropertyModel<String>(moleculeModel, - "familleChimique")).setEnabled(editEnabled)); + "familleChimique")).setEnabled(updateOrDeleteEnabled)); - if (editEnabled) { + if (updateOrDeleteEnabled) { formView.add(new HiddenField<String>("Molecule.formuleDevMol", new PropertyModel<String>(moleculeModel, "formuleDevMol")).add(new MoleculeEditorBehavior(new PropertyModel<String>(moleculeModel, "formuleDevMol")))); @@ -206,16 +206,16 @@ } formView.add(new TextField<String>("Molecule.nomIupca", new PropertyModel<String>(moleculeModel, "nomIupca")) - .setEnabled(editEnabled)); + .setEnabled(updateOrDeleteEnabled)); formView.add(new SimpleTooltipPanel("Molecule.formuleBrute.info", new Model<String>( getString("Molecule.formuleBrute.info")))); formView.add(new TextField<String>("Molecule.formuleBrute", new PropertyModel<String>(moleculeModel, - "formuleBrute")).setEnabled(editEnabled)); + "formuleBrute")).setEnabled(updateOrDeleteEnabled)); TextField<String> masseMolaireField = new TextField<String>("Molecule.masseMolaire", new PropertyModel<String>( moleculeModel, "masseMolaire")); masseMolaireField.setRequired(true); - masseMolaireField.setEnabled(editEnabled); + masseMolaireField.setEnabled(updateOrDeleteEnabled); formView.add(masseMolaireField); // div qui englobe les champs visible ssi nouvMolecul est coché @@ -237,16 +237,16 @@ protected boolean wantOnSelectionChangedNotifications() { return true; } - }.setEnabled(editEnabled)); + }.setEnabled(updateOrDeleteEnabled)); AutoCompleteTextFieldString identifieeParInput = new AutoCompleteTextFieldString("Molecule.identifieePar", new PropertyModel<String>(moleculeModel, "identifieePar"), organismes, ComparisonMode.CONTAINS); - identifieeParInput.setEnabled(editEnabled); + identifieeParInput.setEnabled(updateOrDeleteEnabled); nouvMoleculRefresh.add(identifieeParInput); DropDownChoice<Campagne> campagnesInput = new DropDownChoice<Campagne>("Molecule.campagne", new PropertyModel<Campagne>(moleculeModel, "campagne"), campagnes); - campagnesInput.setEnabled(editEnabled); + campagnesInput.setEnabled(updateOrDeleteEnabled); nouvMoleculRefresh.add(campagnesInput); // Action : création d'une nouvelle campagne @@ -262,14 +262,14 @@ protected void onError(AjaxRequestTarget target, Form<?> form) { setResponsePage(new ManageCampagnePage(currentPage, false)); } - }.setVisibilityAllowed(editEnabled)); + }.setVisibilityAllowed(updateOrDeleteEnabled)); nouvMoleculRefresh.add(new TextArea<String>("Molecule.publiOrigine", new PropertyModel<String>(moleculeModel, - "publiOrigine")).setEnabled(editEnabled)); + "publiOrigine")).setEnabled(updateOrDeleteEnabled)); formView .add(new TextArea<String>("Molecule.complement", new PropertyModel<String>(moleculeModel, "complement")) - .setEnabled(editEnabled)); + .setEnabled(updateOrDeleteEnabled)); // Créateur en lecture seule formView.add(new TextField<String>("Molecule.createur", new PropertyModel<String>(moleculeModel, "createur")) @@ -278,6 +278,7 @@ // add list document panel ManageListDocumentsPanel manageListDocumentsPanel = new ManageListDocumentsPanel("ManageListDocumentsPanel", moleculeModel, currentPage); + manageListDocumentsPanel.setUpdateOrDeleteEnabled(updateOrDeleteEnabled); formView.add(manageListDocumentsPanel); // Action : create molecule @@ -335,7 +336,7 @@ callerPage.responsePage((TemplatePage) getPage()); } }); - deleteButton.setVisibilityAllowed(!createMode); + deleteButton.setVisibilityAllowed(!createMode && updateOrDeleteEnabled); deleteButton.add(new JSConfirmationBehavior(getString("Confirm"))); deleteButton.setDefaultFormProcessing(false); formView.add(deleteButton); Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ReadMoleculePage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ReadMoleculePage.java 2013-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ReadMoleculePage.java 2013-02-27 10:40:04 UTC (rev 162) @@ -302,8 +302,4 @@ }; add(noTableProvenances); } - - public static void main(String[] args) { - System.out.println("cons initProvenanceFields"); - } } Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/personne/ManagePersonnePage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/personne/ManagePersonnePage.java 2013-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/personne/ManagePersonnePage.java 2013-02-27 10:40:04 UTC (rev 162) @@ -145,6 +145,8 @@ // add list document panel ManageListDocumentsPanel manageListDocumentsPanel = new ManageListDocumentsPanel("ManageListDocumentsPanel", personneModel, currentPage); + manageListDocumentsPanel.setUpdateOrDeleteEnabled(createMode + || getSession().getUtilisateur().getTypeDroit() == TypeDroit.ADMINISTRATEUR); formView.add(manageListDocumentsPanel); // Action : création de la personne Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/specimen/ManageSpecimenPage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/specimen/ManageSpecimenPage.java 2013-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/specimen/ManageSpecimenPage.java 2013-02-27 10:40:04 UTC (rev 162) @@ -283,6 +283,9 @@ // add list document panel ManageListDocumentsPanel manageListDocumentsPanel = new ManageListDocumentsPanel("ManageListDocumentsPanel", specimenModel, currentPage); + manageListDocumentsPanel.setUpdateOrDeleteEnabled(createMode + || specimenService.updateOrdeleteSpecimenEnabled(specimenModel.getObject(), getSession() + .getUtilisateur())); formView.add(manageListDocumentsPanel); // Action : création du specimen Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/station/ManageStationPage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/station/ManageStationPage.java 2013-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/station/ManageStationPage.java 2013-02-27 10:40:04 UTC (rev 162) @@ -229,6 +229,10 @@ // add list document panel ManageListDocumentsPanel manageListDocumentsPanel = new ManageListDocumentsPanel("ManageListDocumentsPanel", stationModel, currentPage); + manageListDocumentsPanel + .setUpdateOrDeleteEnabled(createMode + || stationService.updateOrdeleteStationEnabled(stationModel.getObject(), getSession() + .getUtilisateur())); formView.add(manageListDocumentsPanel); Button createButton = new SubmittableButton(ACTION_CREATE, new SubmittableButtonEvents() { Modified: trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/utilisateur/UpdateUtilisateurPage.java =================================================================== --- trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/utilisateur/UpdateUtilisateurPage.java 2013-02-26 14:42:36 UTC (rev 161) +++ trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/utilisateur/UpdateUtilisateurPage.java 2013-02-27 10:40:04 UTC (rev 162) @@ -54,9 +54,6 @@ @AuthRoles( { AuthRole.USER, AuthRole.ADMIN }) public final class UpdateUtilisateurPage extends TemplatePage { - /** Action : delete */ - private static final String ACTION_DELETE = "Delete"; - /** Action : update password */ private static final String ACTION_UPDATE_PASSWORD = "UpdatePassword";
participants (1)
-
echatellier@users.forge.codelutin.com