Commit 8788d918 authored by Rémi GAUTHIER's avatar Rémi GAUTHIER Committed by Yann Mombrun

Various fixes on more than 6 issues

- WEBLAB-1537 / WEBLAB-1519 / WEBLAB-1538 / #879 : communication meta/source
- WEBLAB-1606 / #1181 : link doc traduction/original
- WEBLAB-1607 / #1180 : link doc native
- WEBLAB-1525 / #1269 : config dates hramonisation
- #1206 : add source button with permission control

git-svn-id: svn://svn.forge.objectweb.org/svnroot/weblab/trunk/WebLabServices/Portlets/metadata-portlet@4609 a803c184-d8de-4a0e-a52b-d3eef88212b6
parent 198c5f7a
......@@ -8,7 +8,6 @@
<relativePath>../parent/pom.xml</relativePath>
</parent>
<groupId>org.ow2.weblab.portlets</groupId>
<artifactId>weblab-metaview</artifactId>
<version>2.2.5-SNAPSHOT</version>
......@@ -37,6 +36,12 @@
<groupId>org.ow2.weblab.components</groupId>
<artifactId>weblab-taglib</artifactId>
</dependency>
<dependency>
<groupId>com.liferay.portal</groupId>
<artifactId>portal-service</artifactId>
<version>6.2.3</version>
<scope>provided</scope>
</dependency>
</dependencies>
<description>This portlet displays WebLab resources metadata.</description>
......
......@@ -19,27 +19,40 @@ package org.ow2.weblab.portlet.business.bean;
import java.util.Date;
import javax.annotation.Resource;
@Resource
public class TimeConfig {
private long maxEndDateMS;
private String formatDateTimeForJSTL;
public TimeConfig() {
this.setMaxEndDateMS(new Date());
}
public long getMaxEndDateMS() {
return this.maxEndDateMS;
}
public void setMaxEndDateMS(final Date maxEndDateMS) {
this.maxEndDateMS = maxEndDateMS.getTime();
}
public String getFormatDateTimeForJSTL() {
return formatDateTimeForJSTL;
}
public void setFormatDateTimeForJSTL(String formatDateTimeForJSTL) {
this.formatDateTimeForJSTL = formatDateTimeForJSTL;
}
}
......@@ -21,6 +21,7 @@ import java.net.URI;
import java.util.Locale;
import java.util.Map;
import org.ow2.weblab.core.model.Document;
import org.ow2.weblab.core.model.PieceOfKnowledge;
import org.ow2.weblab.core.model.Resource;
import org.ow2.weblab.core.services.ContentNotAvailableException;
......@@ -42,4 +43,7 @@ public interface MetaViewBusinessServices {
public PieceOfKnowledge getPoKForSelectedTranslation(final URI uri, final URI serviceURI, final String lang);
public PieceOfKnowledge getPoKToUseAsSource(Document doc, String sourceTab);
}
/**
* WEBLAB: Service oriented integration platform for media mining and intelligence applications
*
* Copyright (C) 2004 - 2016 Airbus Defence and Space
*
* This library is free software; you can redistribute it and/or modify it under the terms of
* the GNU Lesser General Public License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*/
package org.ow2.weblab.portlet.business.service;
import javax.portlet.PortletRequest;
import com.liferay.portal.kernel.exception.SystemException;
/**
* Interface defining the service is charge of permission control
*
* @author rgauthier
*/
public interface PermissionService {
public boolean hasAdminRole(PortletRequest request) throws SystemException;
}
......@@ -31,6 +31,7 @@ import org.apache.commons.logging.LogFactory;
import org.ow2.weblab.core.annotator.AbstractAnnotator.Operator;
import org.ow2.weblab.core.annotator.BaseAnnotator;
import org.ow2.weblab.core.model.Resource;
import org.ow2.weblab.portlet.business.bean.TimeConfig;
import org.purl.dc.elements.DublinCoreAnnotator;
/**
......@@ -46,14 +47,15 @@ public class EditMetaServices {
private final Map<String, List<String>> editMetaConf;
private final Log logger = LogFactory.getLog(this.getClass());
private final TimeConfig timeConfig;
private final String pattern = "MM/dd/yyyy HH:mm";
private final Log logger = LogFactory.getLog(this.getClass());
public EditMetaServices(final Map<String, List<String>> editMeta) {
public EditMetaServices(final Map<String, List<String>> editMeta, final TimeConfig timeConfig) {
this.editMetaConf = editMeta;
this.timeConfig = timeConfig;
}
......@@ -83,7 +85,6 @@ public class EditMetaServices {
this.logger.error("Unable to parse date value, the correct format must be MM/dd/yyyy HH:mm", e);
}
}
}
return resource;
}
......@@ -118,7 +119,7 @@ public class EditMetaServices {
} else if (valueType.equals("double")) {
this.write(resource, xlmns, URI.create(entireNameSpace), keyParam, Double.class, Double.valueOf(value));
} else if (valueType.equals("date")) {
final SimpleDateFormat dateFormat = new SimpleDateFormat(this.pattern);
final SimpleDateFormat dateFormat = new SimpleDateFormat(timeConfig.getFormatDateTimeForJSTL());
this.write(resource, xlmns, URI.create(entireNameSpace), keyParam, Date.class, dateFormat.parse(value.toString()));
} else if (valueType.equals("integer")) {
this.write(resource, xlmns, URI.create(entireNameSpace), keyParam, Integer.class, Integer.valueOf(value));
......
/**
* WEBLAB: Service oriented integration platform for media mining and intelligence applications
*
* Copyright (C) 2004 - 2016 Airbus Defence and Space
*
* This library is free software; you can redistribute it and/or modify it under the terms of
* the GNU Lesser General Public License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*/
package org.ow2.weblab.portlet.business.service.impl;
import java.util.List;
import javax.portlet.PortletRequest;
import org.ow2.weblab.portlet.business.service.PermissionService;
import org.springframework.stereotype.Service;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.Role;
import com.liferay.portal.model.User;
import com.liferay.portal.theme.ThemeDisplay;
/**
* Implementation of {@link PermissionService} using Liferay role permissions.
*
* @author rgauthier
*/
@Service
public class LiferayPermissionServiceImpl implements PermissionService {
private final List<String> adminRoles;
public LiferayPermissionServiceImpl(final List<String> adminRoles) {
this.adminRoles = adminRoles;
}
/*
* (non-Javadoc)
*
* @see org.ow2.weblab.portlet.business.service.PermissionService#hasAdminRole(javax.portlet.ResourceRequest)
*/
@Override
public boolean hasAdminRole(PortletRequest request) throws SystemException {
ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
User user = themeDisplay.getUser();
for (String role : adminRoles) {
for (Role userRole : user.getRoles()) {
if (userRole.getName().equals(role))
return true;
}
}
return false;
}
}
......@@ -28,6 +28,7 @@ import org.apache.commons.logging.LogFactory;
import org.ow2.weblab.core.extended.exception.WebLabCheckedException;
import org.ow2.weblab.core.extended.factory.ExceptionFactory;
import org.ow2.weblab.core.helper.impl.SemanticResource;
import org.ow2.weblab.core.model.Document;
import org.ow2.weblab.core.model.PieceOfKnowledge;
import org.ow2.weblab.core.model.Resource;
import org.ow2.weblab.core.model.processing.WProcessingAnnotator;
......@@ -182,4 +183,24 @@ public class WSBusinessServicesImpl implements MetaViewBusinessServices {
return pok;
}
@Override
public PieceOfKnowledge getPoKToUseAsSource(Document doc, String sourceTab) {
final PieceOfKnowledge pok = new PieceOfKnowledge();
pok.setUri("weblab://" + UUID.randomUUID());
URI uri = URI.create(pok.getUri());
final DublinCoreAnnotator dcaDoc = new DublinCoreAnnotator(doc);
final WProcessingAnnotator wpaPok = new WProcessingAnnotator(uri, pok);
final DublinCoreAnnotator dcaDPok = new DublinCoreAnnotator(uri, pok);
wpaPok.writeLabel(dcaDoc.readSource().firstTypedValue());
dcaDPok.writeType(sourceTab);
return pok;
}
}
......@@ -24,6 +24,8 @@ import java.util.Map;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletRequest;
import javax.portlet.PortletURL;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
......@@ -34,6 +36,7 @@ import org.ow2.weblab.core.model.Resource;
import org.ow2.weblab.portlet.business.bean.EditMetaConfBean;
import org.ow2.weblab.portlet.business.bean.TimeConfig;
import org.ow2.weblab.portlet.business.bean.taglib.DataTaglib;
import org.ow2.weblab.portlet.business.service.PermissionService;
import org.ow2.weblab.portlet.business.service.ResourceSaverService;
import org.ow2.weblab.portlet.business.service.impl.EditMetaServices;
import org.springframework.stereotype.Controller;
......@@ -44,6 +47,13 @@ import org.springframework.web.portlet.ModelAndView;
import org.springframework.web.portlet.bind.annotation.ActionMapping;
import org.springframework.web.portlet.bind.annotation.ResourceMapping;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;
import com.liferay.portlet.PortletURLFactoryUtil;
/**
* The controller in charge of the edition.
*
......@@ -52,12 +62,13 @@ import org.springframework.web.portlet.bind.annotation.ResourceMapping;
@Controller
@RequestMapping(value = "VIEW")
@SessionAttributes({ "resource", "isEmptyModel", "isLoadedResource", "rdfProperties", "translations", "metaDisplay", "editMetaData", "timeConfig", "dataTaglib", "dataLanguage",
"useGeoserverExposedMap","editError" })
"useGeoserverExposedMap", "editError" })
public class EditMetaController {
private static final String USE_GEOSERVER_EXPOSED_MAP = "useGeoserverExposedMap";
private static final String EDIT_ERROR = "editError";
......@@ -91,14 +102,23 @@ public class EditMetaController {
private final DataTaglib dataTaglib;
private final TimeConfig timeConfig;
private final ResourceSaverService resourceSaverService;
public EditMetaController(final EditMetaConfBean editMetaData, final DataTaglib dataTaglib, final ResourceSaverService resourceSaverService) {
private final PermissionService permissionService;
public EditMetaController(final EditMetaConfBean editMetaData, final TimeConfig timeConfig, final DataTaglib dataTaglib, final ResourceSaverService resourceSaverService,
final PermissionService permissionService) {
super();
this.editMetaData = editMetaData;
this.timeConfig = timeConfig;
this.dataTaglib = dataTaglib;
this.resourceSaverService = resourceSaverService;
this.permissionService = permissionService;
}
......@@ -110,7 +130,7 @@ public class EditMetaController {
final ModelAndView mav = new ModelAndView();
final ModelMap model = (ModelMap) request.getPortletSession().getAttribute("model");
if (!model.containsAttribute(EditMetaController.TIME_CONFIG)) {
model.addAttribute(EditMetaController.TIME_CONFIG, new TimeConfig());
model.addAttribute(EditMetaController.TIME_CONFIG, timeConfig);
}
if (!model.containsAttribute(EditMetaController.DATA_TAGLIB) || !model.containsAttribute(EditMetaController.DATA_LANGUAGE)) {
model.addAttribute(EditMetaController.DATA_TAGLIB, this.dataTaglib.getFormats());
......@@ -125,7 +145,7 @@ public class EditMetaController {
model.addAttribute(EditMetaController.USE_GEOSERVER_EXPOSED_MAP, Boolean.valueOf(this.editMetaData.isUseGeoserverExposedMap()));
}
if (!model.containsAttribute(EditMetaController.EDIT_ERROR)){
if (!model.containsAttribute(EditMetaController.EDIT_ERROR)) {
model.addAttribute(EditMetaController.EDIT_ERROR, false);
}
mav.setView("editview");
......@@ -134,25 +154,34 @@ public class EditMetaController {
}
@ResourceMapping("canceledit")
public ModelAndView cancelEdit(final ResourceRequest request, final ResourceResponse response, final ModelMap model) {
response.setContentType(EditMetaController.TEXT_HTML);
response.setCharacterEncoding(EditMetaController.UTF_8);
final ModelAndView mav = new ModelAndView();
mav.setView("view_meta_ajax");
mav.addAllObjects(model);
return mav;
@ResourceMapping("clearErrorAttribute")
public void clearModelAttribute(final ModelMap model) {
model.addAttribute(EditMetaController.EDIT_ERROR, false);
}
@ResourceMapping("clearErrorAttribute")
public void clearModelAttribute(final ModelMap model){
model.addAttribute(EditMetaController.EDIT_ERROR,false);
@ActionMapping(params = "action=cancel")
public void cancelEdit(final ActionRequest actionRequest, final ActionResponse response, final ModelMap model) throws SystemException, PortalException, IOException {
this.logger.debug("view redirect after cancel method called");
// build link to default portlet jsp
String portletName = (String) actionRequest.getAttribute(WebKeys.PORTLET_ID);
ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
PortletURL portletURL = PortletURLFactoryUtil.create(PortalUtil.getHttpServletRequest(actionRequest), portletName, themeDisplay.getLayout().getPlid(), PortletRequest.RENDER_PHASE);
response.sendRedirect(portletURL.toString());
}
@ActionMapping(params = "action=save")
public void saveEdit(final ActionRequest request, final ActionResponse response, final ModelMap model) {
public void saveEdit(final ActionRequest request, final ActionResponse response, final ModelMap model) throws SystemException, PortalException, IOException {
this.logger.debug("saveEdit method called");
if (!permissionService.hasAdminRole(request)) {
logger.error("The current user does not have the role to be authorized to edit the metadata of any document!");
return;
}
if (this.resourceSaverService == null) {
this.logger.error("No resource saver service configured !!!");
return;
......@@ -161,7 +190,7 @@ public class EditMetaController {
final Resource resource = (Resource) model.get(EditMetaController.RESOURCE);
final Map<String, List<String>> editMeta = (LinkedHashMap<String, List<String>>) model.get(EditMetaController.EDIT_META_DATA);
final Map<String, String[]> parameterMap = request.getParameterMap();
final EditMetaServices editMetaServices = new EditMetaServices(editMeta);
final EditMetaServices editMetaServices = new EditMetaServices(editMeta, timeConfig);
editMetaServices.writeContent(resource, parameterMap);
boolean worked = false;
try {
......@@ -177,6 +206,4 @@ public class EditMetaController {
model.addAttribute(EditMetaController.RESOURCE, resource);
request.getPortletSession().setAttribute("model", model);
}
}
......@@ -32,6 +32,7 @@ import javax.xml.namespace.QName;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.ow2.weblab.core.model.Document;
import org.ow2.weblab.core.model.PieceOfKnowledge;
import org.ow2.weblab.core.model.Resource;
import org.ow2.weblab.core.services.ContentNotAvailableException;
......@@ -40,6 +41,7 @@ import org.ow2.weblab.core.services.UnexpectedException;
import org.ow2.weblab.portlet.business.bean.DisplayMetaConfBean;
import org.ow2.weblab.portlet.business.bean.RDFPropertiesConfBean;
import org.ow2.weblab.portlet.business.service.MetaViewBusinessServices;
import org.ow2.weblab.portlet.business.service.PermissionService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ExceptionHandler;
......@@ -52,6 +54,8 @@ import org.springframework.web.portlet.bind.annotation.EventMapping;
import org.springframework.web.portlet.bind.annotation.RenderMapping;
import org.springframework.web.portlet.bind.annotation.ResourceMapping;
import com.liferay.portal.kernel.exception.SystemException;
/**
* Metaview portlet Spring MVC controller.
* Business layer is accessible by Spring business services
......@@ -63,11 +67,11 @@ import org.springframework.web.portlet.bind.annotation.ResourceMapping;
@Controller
@RequestMapping(value = "VIEW")
@SessionAttributes({ "resource", "isEmptyModel", "isLoadedResource", "rdfProperties", "translations", "metaDisplay", "editMetaData", "timeConfig", "dataTaglib", "dataLanguage",
"useGeoserverExposedMap","editError" })
"useGeoserverExposedMap", "editError" })
public class MetaViewController {
private static final String RESOURCE = "resource";
protected static final String RESOURCE = "resource";
private static final String IS_LOADED_RESOURCE = "isLoadedResource";
......@@ -76,6 +80,12 @@ public class MetaViewController {
private static final String IS_EMPTY_MODEL = "isEmptyModel";
private static final String HAS_ADMIN_ROLE = "userHasAdminRole";
protected static final String ALLOW_SOURCE_EVENTING = "allowSourceEventing";
// attributes
protected final Log logger = LogFactory.getLog(this.getClass());
......@@ -83,17 +93,30 @@ public class MetaViewController {
protected final MetaViewBusinessServices metaviewBusinessService;
protected final PermissionService permissionService;
protected final DisplayMetaConfBean metaDisplayConf;
protected final RDFPropertiesConfBean rdfProperties;
public MetaViewController(final MetaViewBusinessServices metaviewBusinessService, final DisplayMetaConfBean metaDisplayConf, final RDFPropertiesConfBean rdfProperties) {
protected final String sourceTypeTab;
protected final Boolean allowSourceEventing;
public MetaViewController(final MetaViewBusinessServices metaviewBusinessService, final PermissionService permissionService, final DisplayMetaConfBean metaDisplayConf,
final RDFPropertiesConfBean rdfProperties, final String sourceTypeTab, final Boolean allowSourceEventing) {
super();
this.metaviewBusinessService = metaviewBusinessService;
this.permissionService = permissionService;
this.metaDisplayConf = metaDisplayConf;
this.rdfProperties = rdfProperties;
this.sourceTypeTab = sourceTypeTab;
this.allowSourceEventing = allowSourceEventing;
}
......@@ -142,6 +165,25 @@ public class MetaViewController {
}
@ActionMapping(params = "action=useAsSource")
public void useAsSource(final ActionRequest request, final ActionResponse response, final ModelMap model) throws SystemException {
this.logger.info("send event useAsSource");
if (!permissionService.hasAdminRole(request)) {
logger.warn("The current user does not have the role to be authorized to use this as a source!");
return;
}
if (this.allowSourceEventing == null || !this.allowSourceEventing) {
logger.warn("The user does not have the authorisation to send an event to the source!");
return;
}
Document doc = (Document) model.get(MetaViewController.RESOURCE);
PieceOfKnowledge pok = metaviewBusinessService.getPoKToUseAsSource(doc, sourceTypeTab);
response.setEvent(QName.valueOf("{http://weblab.ow2.org/portlet/action}useAsSource"), pok);
}
// #############################################################################
// event mapping methods #
......@@ -177,7 +219,7 @@ public class MetaViewController {
// #############################################################################
@ResourceMapping("showMetadata")
public ModelAndView serveMetadata(final ResourceRequest request, final ResourceResponse response, final ModelMap model)
throws ContentNotAvailableException, InvalidParameterException, UnexpectedException {
throws ContentNotAvailableException, InvalidParameterException, UnexpectedException, SystemException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
......@@ -193,6 +235,12 @@ public class MetaViewController {
isLoadedDocument = ((Boolean) model.get(MetaViewController.IS_LOADED_RESOURCE)).booleanValue();
}
// allow events to be send to source portlet
mav.getModelMap().addAttribute(MetaViewController.ALLOW_SOURCE_EVENTING, this.allowSourceEventing);
// check admin permissions for user
mav.getModelMap().addAttribute(MetaViewController.HAS_ADMIN_ROLE, permissionService.hasAdminRole(request));
// adding map to model
if (!isLoadedDocument) {
// loading resource from pok by calling service
......
javax.portlet.title= Metadata view Portlet
portlet.title = Metadata view
portlet.warning.session_expired = Session expired
meta.useAsSource = Use as new source
meta.defaultTitle = Title unavailable
meta.metadata = meta-data
meta.hasNativeContent = Native Content:
......@@ -35,6 +35,7 @@ meta.hasRank = Rank:
meta.hasDescription = Description:
meta.hasScore = Score:
meta.gatheringDate = Gathering date:
meta.mainDate = Date of document:
meta.extent = Media extension:
meta.projectName = Crawling project name:
meta.hasOriginalFileSize = Original file size:
......@@ -46,7 +47,7 @@ meta.rate = Rating:
meta.commented = Comment:
meta.reliability = Reliability:
meta.credibility = Credibility:
meta.toKeep = ToKeep:
meta.toKeep = Protected:
meta.location = Document Location:
meta.label.location = Document Location
meta.speaker = Speakers:
......
javax.portlet.title = Meta-Daten Ansicht Portlet
portlet.title = Meta-Daten Ansicht
portlet.warning.session_expired = Sitzung abgelaufen
meta.useAsSource = Als neue Quelle benutzen
meta.defaultTitle = Titel nicht verfgbar
meta.metadata = Metadaten&nbsp;:
meta.hasNativeContent = Native Inhalt&nbsp;:
......
javax.portlet.title= Metadata view Portlet
portlet.title = Metadata view
portlet.warning.session_expired = Session expired
meta.useAsSource = Use as new source
meta.defaultTitle = Title unavailable
meta.metadata = meta-data
meta.hasNativeContent = Native Content:
......@@ -46,7 +46,7 @@ meta.rate = Rating:
meta.commented = Comment:
meta.reliability = Reliability:
meta.credibility = Credibility:
meta.toKeep = ToKeep:
meta.toKeep = Protected:
meta.lat= Lat:
meta.lon= Lon:
meta.location = Document Location:
......
javax.portlet.title= Portlet visor de metadatos
portlet.title = Visor de metadatos
portlet.warning.session_expired = Sesin caducada
meta.useAsSource = Use como una nueva fuente
meta.defaultTitle = Ttulo no disponible
meta.metadata = meta-datos&nbsp;:
meta.hasNativeContent = Contenido Nativo&nbsp;:
......
javax.portlet.title=Portlet de visualisation des mtadonnes
portlet.title = Portlet de visualisation des mtadonnes
portlet.warning.session_expired = Votre session a expir
javax.portlet.title=Portlet de visualisation des métadonnées
portlet.title = Portlet de visualisation des métadonnées
portlet.warning.session_expired = Votre session a expiré
meta.useAsSource = Ajouter comme source
meta.defaultTitle = Titre indisponible
meta.metadata = Meta-donnes
meta.metadata = Meta-données
meta.hasNativeContent = Contenu natif&nbsp;:
meta.hasNormalisedContent = Contenu normalis&nbsp;:
meta.isGeneratedFrom = Gner depuis&nbsp;:
meta.isProducedFrom = Identifiant systme&nbsp;:
meta.hasNormalisedContent = Contenu normalisé&nbsp;:
meta.isGeneratedFrom = Géneré depuis&nbsp;:
meta.isProducedFrom = Identifiant système&nbsp;:
meta.isResultOf = Resultat de&nbsp;:
meta.hasNumberOfResults = Nombre de rsultats&nbsp;:
meta.hasNumberOfResults = Nombre de résultats&nbsp;:
meta.isExposedAs = Document natif&nbsp;:
meta.title = Titre&nbsp;:
meta.creator = Crateur&nbsp;:
meta.abstract = Rsum&nbsp;:
meta.catego = Catgorie&nbsp;:
meta.creator = Créateur&nbsp;:
meta.abstract = Résumé&nbsp;:
meta.catego = Catégorie&nbsp;:
meta.subject = Sujet et mots-clefs&nbsp;:
meta.description = Commentaires crateur&nbsp;:
meta.description = Commentaires créateur&nbsp;:
meta.publisher = Editeur&nbsp;:
meta.contributor = Contributeur&nbsp;:
meta.date = Date&nbsp;:
......@@ -29,8 +30,8 @@ meta.relation = Relation&nbsp;:
meta.coverage = Couverture spatiale ou temporelle&nbsp;:
meta.right = Droit&nbsp;:
meta.modified = Date de modification&nbsp;:
meta.created = Date de cration&nbsp;:
meta.meta_name = Mtadonne&nbsp;:
meta.created = Date de création&nbsp;:
meta.meta_name = Métadonnée&nbsp;:
meta.meta_value = Valeur&nbsp;:
meta.hasRank = Rang&nbsp;:
meta.hasDescription = Description&nbsp;:
......@@ -38,41 +39,41 @@ meta.hasScore = Pertinence&nbsp;:
meta.gatheringDate = Date de collecte&nbsp;:
meta.catego = Classification&nbsp;:
meta.extent = Statistiques sur le document&nbsp;:
meta.projectName = Nom du projet li la collecte&nbsp;:
meta.projectName = Nom du projet lié à la collecte&nbsp;:
meta.hasOriginalFileSize = Taille du fichier source&nbsp;:
meta.refersTo = Documents externes lis&nbsp;:
meta.seeAlso = Voir galement&nbsp;:
meta.refersTo = Documents externes liés&nbsp;:
meta.seeAlso = Voir également&nbsp;:
meta.availableTranslations = Traductions&nbsp;:
meta.originalLanguageVersion = Version d'origine
meta.rate = Note :
meta.commented = Commentaire :
meta.reliability = Fiabilit :
meta.credibility = Crdibilit :
meta.toKeep = A garder:
meta.reliability = Fiabilité :
meta.credibility = Crédibilité :
meta.toKeep = Protégé :
meta.location = Emplacement du document :
meta.label.location = Emplacement du document
meta.speaker = Locuteurs :
meta.edit.rate = Note
meta.edit.commented = Commentaire
meta.edit.reliability = Fiabilit
meta.edit.credibility = Crdibilit
meta.edit.reliability = Fiabilité
meta.edit.credibility = Crédibilité
meta.edit.subject = Sujet
meta.edit.toKeep = garder
meta.label.toKeep = A garder
meta.edit.lat = lat
meta.edit.lon = long
meta.edit.error.credibreliable=Ce champ ne peut tre vide.
meta.errorSave= Une erreur s'est produite, les nouvelles mta-donnes ne seront pas sauvegardes.
meta.addMetaButton=Ajouter des mta-donnes
meta.edit.error.credibreliable=Ce champ ne peut être vide.
meta.errorSave= Une erreur s'est produite, les nouvelles méta-données ne seront pas sauvegardées.
meta.addMetaButton=Ajouter des méta-données
meta.cancelButton=Annuler
meta.saveButton=Sauvegarder
meta.editButton=Editer
portlet.meta.configuration = Affichage des mta-donnes
portlet.meta.con