/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.java.sip.communicator.plugin.defaultresourcepack; import java.net.*; import java.util.*; import net.java.sip.communicator.service.resources.*; import net.java.sip.communicator.util.*; import org.osgi.framework.*; /** * * @author damencho */ public class DefaultResourcePackActivator implements BundleActivator { private Logger logger = Logger.getLogger(DefaultResourcePackActivator.class); static BundleContext bundleContext; // buffer for ressource files found private static Hashtable<String, Iterator<String>> ressourcesFiles = new Hashtable<String, Iterator<String>>(); public void start(BundleContext bc) throws Exception { bundleContext = bc; DefaultColorPackImpl colPackImpl = new DefaultColorPackImpl(); Hashtable<String, String> props = new Hashtable<String, String>(); props.put(ResourcePack.RESOURCE_NAME, ColorPack.RESOURCE_NAME_DEFAULT_VALUE); bundleContext.registerService( ColorPack.class.getName(), colPackImpl, props); DefaultImagePackImpl imgPackImpl = new DefaultImagePackImpl(); Hashtable<String, String> imgProps = new Hashtable<String, String>(); imgProps.put(ResourcePack.RESOURCE_NAME, ImagePack.RESOURCE_NAME_DEFAULT_VALUE); bundleContext.registerService( ImagePack.class.getName(), imgPackImpl, imgProps); DefaultLanguagePackImpl langPackImpl = new DefaultLanguagePackImpl(); Hashtable<String, String> langProps = new Hashtable<String, String>(); langProps.put(ResourcePack.RESOURCE_NAME, LanguagePack.RESOURCE_NAME_DEFAULT_VALUE); bundleContext.registerService( LanguagePack.class.getName(), langPackImpl, langProps); DefaultSettingsPackImpl setPackImpl = new DefaultSettingsPackImpl(); Hashtable<String, String> setProps = new Hashtable<String, String>(); setProps.put(ResourcePack.RESOURCE_NAME, SettingsPack.RESOURCE_NAME_DEFAULT_VALUE); bundleContext.registerService( SettingsPack.class.getName(), setPackImpl, setProps); DefaultSoundPackImpl sndPackImpl = new DefaultSoundPackImpl(); Hashtable<String, String> sndProps = new Hashtable<String, String>(); sndProps.put(ResourcePack.RESOURCE_NAME, SoundPack.RESOURCE_NAME_DEFAULT_VALUE); bundleContext.registerService( SoundPack.class.getName(), sndPackImpl, sndProps); if (logger.isInfoEnabled()) logger.info("Default resources ... [REGISTERED]"); } public void stop(BundleContext bc) throws Exception { } /** * Finds all properties files for the given path in this bundle. * * @param path the path pointing to the properties files. */ protected static Iterator<String> findResourcePaths( String path, String pattern) { Iterator<String> bufferedResult = ressourcesFiles.get(path + pattern); if (bufferedResult != null) { return bufferedResult; } ArrayList<String> propertiesList = new ArrayList<String>(); @SuppressWarnings ("unchecked") Enumeration<URL> propertiesUrls = bundleContext.getBundle() .findEntries(path, pattern, false); if (propertiesUrls != null) { while (propertiesUrls.hasMoreElements()) { URL propertyUrl = propertiesUrls.nextElement(); // Remove the first slash. String propertyFilePath = propertyUrl.getPath().substring(1); // Replace all slashes with dots. propertyFilePath = propertyFilePath.replaceAll("/", "."); propertiesList.add(propertyFilePath); } } Iterator<String> result = propertiesList.iterator(); ressourcesFiles.put(path + pattern, result); return result; } }