001/* 002 * (C) Copyright 2015 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * Nelson Silva 018 */ 019 020package org.nuxeo.ecm.media.publishing.adapter; 021 022import org.nuxeo.ecm.core.api.Blob; 023import org.nuxeo.ecm.core.api.DocumentModel; 024import org.nuxeo.ecm.core.api.blobholder.BlobHolder; 025import org.nuxeo.ecm.media.publishing.MediaPublishingProvider; 026import org.nuxeo.ecm.media.publishing.MediaPublishingService; 027import org.nuxeo.runtime.api.Framework; 028 029import static org.nuxeo.ecm.media.publishing.MediaPublishingConstants.ACCOUNT_PROPERTY_NAME; 030import static org.nuxeo.ecm.media.publishing.MediaPublishingConstants.ID_PROPERTY_NAME; 031import static org.nuxeo.ecm.media.publishing.MediaPublishingConstants.PROVIDER_PROPERTY_NAME; 032import static org.nuxeo.ecm.media.publishing.MediaPublishingConstants.PROVIDERS_PROPERTY_NAME; 033 034import java.io.Serializable; 035import java.util.List; 036import java.util.Map; 037 038/** 039 * @since 7.3 040 */ 041public class PublishableMediaAdapter implements PublishableMedia { 042 final DocumentModel doc; 043 044 public PublishableMediaAdapter(DocumentModel doc) { 045 this.doc = doc; 046 } 047 048 @Override 049 public Map<String, Object> getProvider(String provider) { 050 List<Map<String, Object>> providers = getProviders(); 051 for (Map<String, Object> entry : providers) { 052 if (entry.get(PROVIDER_PROPERTY_NAME).equals(provider)) { 053 return entry; 054 } 055 } 056 return null; 057 } 058 059 @Override 060 public void putProvider(Map<String, Object> provider) { 061 // Check if provider already exists 062 // if so replace entry fields, otherwise add 063 List<Map<String, Object>> providers = getProviders(); 064 boolean providerExists = false; 065 for (Map<String, Object> entry : providers) { 066 if (entry.get(PROVIDER_PROPERTY_NAME).equals(provider.get(PROVIDER_PROPERTY_NAME))) { 067 entry.put(ID_PROPERTY_NAME, provider.get(ID_PROPERTY_NAME)); 068 entry.put(ACCOUNT_PROPERTY_NAME, provider.get(ACCOUNT_PROPERTY_NAME)); 069 providerExists = true; 070 break; 071 } 072 } 073 if (!providerExists) { 074 providers.add(provider); 075 } 076 doc.setPropertyValue(PROVIDERS_PROPERTY_NAME, (Serializable) providers); 077 } 078 079 @Override 080 public void removeProvider(String provider) { 081 List<Map<String, Object>> providers = getProviders(); 082 Map<String, Object> providerEntry = getProvider(provider); 083 providers.remove(providerEntry); 084 setProviders(providers); 085 } 086 087 @Override 088 public boolean isPublishedByProvider(String provider) { 089 List<Map<String, Object>> providers = getProviders(); 090 for (Map<String, Object> entry : providers) { 091 if (entry.get(PROVIDER_PROPERTY_NAME).equals(provider)) { 092 String mediaId = (String) entry.get(ID_PROPERTY_NAME); 093 String account = (String) entry.get(ACCOUNT_PROPERTY_NAME); 094 if (getMediaPublishingProvider(provider).isMediaPublished(mediaId, account)) { 095 return true; 096 } 097 } 098 } 099 return false; 100 } 101 102 @Override 103 public List<Map<String, Object>> getProviders() { 104 return (List<Map<String, Object>>) doc.getPropertyValue(PROVIDERS_PROPERTY_NAME); 105 } 106 107 @Override 108 public void setProviders(List<Map<String, Object>> providers) { 109 doc.setPropertyValue(PROVIDERS_PROPERTY_NAME, (Serializable) providers); 110 } 111 112 @Override 113 public String getId(String provider) { 114 Map<String, Object> entry = getProvider(provider); 115 if (entry == null) { 116 return null; 117 } 118 return (String) entry.get(ID_PROPERTY_NAME); 119 } 120 121 @Override 122 public String getAccount(String provider) { 123 Map<String, Object> entry = getProvider(provider); 124 if (entry == null) { 125 return null; 126 } 127 return (String) entry.get(ACCOUNT_PROPERTY_NAME); 128 } 129 130 @Override 131 public void setId(String id) { 132 133 } 134 135 @Override 136 public String getTitle() { 137 return doc.getTitle(); 138 } 139 140 @Override 141 public String getDescription() { 142 return (String) doc.getPropertyValue("dc:description"); 143 } 144 145 @Override 146 public Blob getBlob() { 147 return doc.getAdapter(BlobHolder.class).getBlob(); 148 } 149 150 @Override 151 public String getUrl(String provider) { 152 153 return getMediaPublishingProvider(provider).getPublishedUrl(getId(provider), getAccount(provider)); 154 } 155 156 @Override 157 public String getEmbedCode(String provider) { 158 return getMediaPublishingProvider(provider).getEmbedCode(getId(provider), getAccount(provider)); 159 } 160 161 @Override 162 public Map<String, String> getStats(String provider) { 163 return getMediaPublishingProvider(provider).getStats(getId(provider), getAccount(provider)); 164 } 165 166 private MediaPublishingProvider getMediaPublishingProvider(String provider) { 167 return getMediaPublishingService().getProvider(provider); 168 } 169 170 private MediaPublishingService getMediaPublishingService() { 171 return Framework.getService(MediaPublishingService.class); 172 } 173}