001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019 package org.apache.geronimo.mail; 020 021 import java.net.URL; 022 023 import java.util.ArrayList; 024 import java.util.Collection; 025 import java.util.List; 026 import java.util.concurrent.ConcurrentMap; 027 import java.util.concurrent.ConcurrentHashMap; 028 029 import org.osgi.framework.Bundle; 030 import org.osgi.framework.BundleActivator; 031 import org.osgi.framework.BundleContext; 032 import org.osgi.framework.ServiceRegistration; 033 import org.osgi.framework.ServiceReference; 034 import org.osgi.service.log.LogService; 035 import org.osgi.util.tracker.BundleTracker; 036 import org.osgi.util.tracker.ServiceTracker; 037 import org.osgi.util.tracker.ServiceTrackerCustomizer; 038 039 /** 040 * The activator that starts and manages the tracking of 041 * JAF activation command maps 042 */ 043 public class MailProviderRegistry { 044 // a list of all active mail provider config files 045 static ConcurrentMap<Long, URL> providers = new ConcurrentHashMap<Long, URL>(); 046 // a list of all active default provider config files 047 static ConcurrentMap<Long, URL> defaultProviders = new ConcurrentHashMap<Long, URL>(); 048 049 /** 050 * Perform the check for an existing mailcap file when 051 * a bundle is registered. 052 * 053 * @param bundle The potential provider bundle. 054 * 055 * @return A URL object if this bundle contains a mailcap file. 056 */ 057 static Object registerBundle(Bundle bundle) { 058 // potential tracker return result 059 Object result = null; 060 // a given bundle might have a javamail.providers definition and/or a 061 // default providers definition. 062 URL url = bundle.getResource("META-INF/javamail.providers"); 063 if (url != null) { 064 providers.put(bundle.getBundleId(), url); 065 // this indicates our interest 066 result = url; 067 } 068 069 url = bundle.getResource("META-INF/javamail.default.providers"); 070 if (url != null) { 071 defaultProviders.put(bundle.getBundleId(), url); 072 // this indicates our interest 073 result = url; 074 } 075 // the url marks our interest in additional activity for this 076 // bundle. 077 return result; 078 } 079 080 081 /** 082 * Remove a bundle from our potential mailcap pool. 083 * 084 * @param bundle The potential source bundle. 085 */ 086 static void unregisterBundle(Bundle bundle) { 087 // remove these items 088 providers.remove(bundle.getBundleId()); 089 defaultProviders.remove(bundle.getBundleId()); 090 } 091 092 /** 093 * Retrieve any located provider definitions 094 * from bundles. 095 * 096 * @return A collection of the provider definition file 097 * URLs. 098 */ 099 public static Collection<URL> getProviders() { 100 return providers.values(); 101 } 102 103 /** 104 * Retrieve any located default provider definitions 105 * from bundles. 106 * 107 * @return A collection of the default provider definition file 108 * URLs. 109 */ 110 public static Collection<URL> getDefaultProviders() { 111 return defaultProviders.values(); 112 } 113 }