001/* 002 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the Eclipse Public License v1.0 006 * which accompanies this distribution, and is available at 007 * http://www.eclipse.org/legal/epl-v10.html 008 * 009 * Contributors: 010 * Nuxeo - initial API and implementation 011 * 012 * $Id: JOOoConvertPluginImpl.java 18651 2007-05-13 20:28:53Z sfermigier $ 013 */ 014 015package org.nuxeo.ecm.platform.dublincore.service; 016 017import static org.nuxeo.ecm.core.api.event.DocumentEventTypes.DOCUMENT_CREATED; 018import static org.nuxeo.ecm.core.api.security.SecurityConstants.SYSTEM_USERNAME; 019 020import java.security.Principal; 021import java.util.ArrayList; 022import java.util.Arrays; 023import java.util.Calendar; 024import java.util.List; 025 026import org.apache.commons.logging.Log; 027import org.apache.commons.logging.LogFactory; 028import org.nuxeo.ecm.core.api.DocumentModel; 029import org.nuxeo.ecm.core.api.SystemPrincipal; 030import org.nuxeo.ecm.core.event.Event; 031import org.nuxeo.ecm.core.schema.SchemaManager; 032import org.nuxeo.runtime.api.Framework; 033import org.nuxeo.runtime.model.DefaultComponent; 034 035/** 036 * Service that writes Metadata. 037 * 038 * @author <a href="td@nuxeo.com">Thierry Delprat</a> 039 */ 040public class DublinCoreStorageService extends DefaultComponent { 041 042 public static Log log = LogFactory.getLog(DublinCoreStorageService.class); 043 044 public static final String ID = "DublinCoreStorageService"; 045 046 public void setCreationDate(DocumentModel doc, Calendar creationDate, Event event) { 047 doc.setProperty("dublincore", "created", creationDate); 048 addContributor(doc, event); 049 } 050 051 public void setModificationDate(DocumentModel doc, Calendar modificationDate, Event event) { 052 doc.setProperty("dublincore", "modified", modificationDate); 053 if (doc.getProperty("dublincore", "created") == null) { 054 setCreationDate(doc, modificationDate, event); 055 } 056 } 057 058 public void addContributor(DocumentModel doc, Event event) { 059 Principal principal = event.getContext().getPrincipal(); 060 if (principal == null) { 061 return; 062 } 063 064 String principalName = principal.getName(); 065 if (principal instanceof SystemPrincipal) { 066 SystemPrincipal nxp = (SystemPrincipal) principal; 067 String originatingUser = nxp.getOriginatingUser(); 068 if ((originatingUser == null || SYSTEM_USERNAME.equals(originatingUser)) 069 && !DOCUMENT_CREATED.equals(event.getName())) { 070 return; 071 } else { 072 principalName = originatingUser; 073 } 074 } 075 076 String[] contributorsArray = (String[]) doc.getProperty("dublincore", "contributors"); 077 078 List<String> contributorsList = new ArrayList<String>(); 079 080 if (contributorsArray != null && contributorsArray.length > 0) { 081 contributorsList = Arrays.asList(contributorsArray); 082 // make it resizable 083 contributorsList = new ArrayList<String>(contributorsList); 084 } else { 085 // initialize creator too 086 SchemaManager schemaMgr = Framework.getLocalService(SchemaManager.class); 087 if (schemaMgr.getSchema("dublincore").getField("creator") != null) { 088 // First time only => creator 089 doc.setProperty("dublincore", "creator", principalName); 090 } 091 } 092 093 if (!contributorsList.contains(principalName)) { 094 contributorsList.add(principalName); 095 String[] contributorListIn = new String[contributorsList.size()]; 096 contributorsList.toArray(contributorListIn); 097 doc.setProperty("dublincore", "contributors", contributorListIn); 098 } 099 100 doc.setProperty("dublincore", "lastContributor", principalName); 101 } 102 103 public void setIssuedDate(DocumentModel doc, Calendar issuedDate) { 104 doc.setPropertyValue("dc:issued", issuedDate); 105 } 106 107}