001/* 002 * (C) Copyright 2015 Nuxeo SA (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl-2.1.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * Nelson Silva 016 */ 017 018package org.nuxeo.ecm.media.publishing.adapter; 019 020import org.nuxeo.ecm.core.api.Blob; 021import org.nuxeo.ecm.core.api.DocumentModel; 022import org.nuxeo.ecm.core.api.blobholder.BlobHolder; 023import org.nuxeo.ecm.media.publishing.MediaPublishingProvider; 024import org.nuxeo.ecm.media.publishing.MediaPublishingService; 025import org.nuxeo.runtime.api.Framework; 026 027import static org.nuxeo.ecm.media.publishing.MediaPublishingConstants.ACCOUNT_PROPERTY_NAME; 028import static org.nuxeo.ecm.media.publishing.MediaPublishingConstants.ID_PROPERTY_NAME; 029import static org.nuxeo.ecm.media.publishing.MediaPublishingConstants.PROVIDER_PROPERTY_NAME; 030import static org.nuxeo.ecm.media.publishing.MediaPublishingConstants.PROVIDERS_PROPERTY_NAME; 031 032import java.io.Serializable; 033import java.util.List; 034import java.util.Map; 035 036/** 037 * @since 7.3 038 */ 039public class PublishableMediaAdapter implements PublishableMedia { 040 final DocumentModel doc; 041 042 public PublishableMediaAdapter(DocumentModel doc) { 043 this.doc = doc; 044 } 045 046 @Override 047 public Map<String, Object> getProvider(String provider) { 048 List<Map<String, Object>> providers = getProviders(); 049 for (Map<String, Object> entry : providers) { 050 if (entry.get(PROVIDER_PROPERTY_NAME).equals(provider)) { 051 return entry; 052 } 053 } 054 return null; 055 } 056 057 @Override 058 public void putProvider(Map<String, Object> provider) { 059 // Check if provider already exists 060 // if so replace entry fields, otherwise add 061 List<Map<String, Object>> providers = getProviders(); 062 boolean providerExists = false; 063 for (Map<String, Object> entry : providers) { 064 if (entry.get(PROVIDER_PROPERTY_NAME).equals(provider.get(PROVIDER_PROPERTY_NAME))) { 065 entry.put(ID_PROPERTY_NAME, provider.get(ID_PROPERTY_NAME)); 066 entry.put(ACCOUNT_PROPERTY_NAME, provider.get(ACCOUNT_PROPERTY_NAME)); 067 providerExists = true; 068 break; 069 } 070 } 071 if (!providerExists) { 072 providers.add(provider); 073 } 074 doc.setPropertyValue(PROVIDERS_PROPERTY_NAME, (Serializable) providers); 075 } 076 077 @Override 078 public void removeProvider(String provider) { 079 List<Map<String, Object>> providers = getProviders(); 080 Map<String, Object> providerEntry = getProvider(provider); 081 providers.remove(providerEntry); 082 setProviders(providers); 083 } 084 085 @Override 086 public boolean isPublishedByProvider(String provider) { 087 List<Map<String, Object>> providers = getProviders(); 088 for (Map<String, Object> entry : providers) { 089 if (entry.get(PROVIDER_PROPERTY_NAME).equals(provider)) { 090 String mediaId = (String) entry.get(ID_PROPERTY_NAME); 091 String account = (String) entry.get(ACCOUNT_PROPERTY_NAME); 092 if (getMediaPublishingProvider(provider).isMediaPublished(mediaId, account)) { 093 return true; 094 } 095 } 096 } 097 return false; 098 } 099 100 @Override 101 public List<Map<String, Object>> getProviders() { 102 return (List<Map<String, Object>>) doc.getPropertyValue(PROVIDERS_PROPERTY_NAME); 103 } 104 105 @Override 106 public void setProviders(List<Map<String, Object>> providers) { 107 doc.setPropertyValue(PROVIDERS_PROPERTY_NAME, (Serializable) providers); 108 } 109 110 @Override 111 public String getId(String provider) { 112 Map<String, Object> entry = getProvider(provider); 113 if (entry == null) { 114 return null; 115 } 116 return (String) entry.get(ID_PROPERTY_NAME); 117 } 118 119 @Override 120 public String getAccount(String provider) { 121 Map<String, Object> entry = getProvider(provider); 122 if (entry == null) { 123 return null; 124 } 125 return (String) entry.get(ACCOUNT_PROPERTY_NAME); 126 } 127 128 @Override 129 public void setId(String id) { 130 131 } 132 133 @Override 134 public String getTitle() { 135 return doc.getTitle(); 136 } 137 138 @Override 139 public String getDescription() { 140 return (String) doc.getPropertyValue("dc:description"); 141 } 142 143 @Override 144 public Blob getBlob() { 145 return doc.getAdapter(BlobHolder.class).getBlob(); 146 } 147 148 @Override 149 public String getUrl(String provider) { 150 151 return getMediaPublishingProvider(provider).getPublishedUrl(getId(provider), getAccount(provider)); 152 } 153 154 @Override 155 public String getEmbedCode(String provider) { 156 return getMediaPublishingProvider(provider).getEmbedCode(getId(provider), getAccount(provider)); 157 } 158 159 @Override 160 public Map<String, String> getStats(String provider) { 161 return getMediaPublishingProvider(provider).getStats(getId(provider), getAccount(provider)); 162 } 163 164 private MediaPublishingProvider getMediaPublishingProvider(String provider) { 165 return getMediaPublishingService().getProvider(provider); 166 } 167 168 private MediaPublishingService getMediaPublishingService() { 169 return Framework.getService(MediaPublishingService.class); 170 } 171}