use of org.apache.felix.framework.util.StringMap in project felix by apache.
the class Service method init.
public void init(InstallationLayout suppliedLayout, String[] args) throws Exception {
if (!(suppliedLayout instanceof FelixLayout)) {
this.layout = new FelixLayout(suppliedLayout);
} else {
this.layout = (FelixLayout) suppliedLayout;
}
configationProperties = readConfigProperties();
instance = new Felix(new StringMap(configationProperties, false), null);
}
use of org.apache.felix.framework.util.StringMap in project felix by apache.
the class JarRevision method getManifestHeader.
public Map<String, Object> getManifestHeader() throws Exception {
// Read and parse headers into a case insensitive map of manifest attributes and return it.
ZipEntry manifestEntry = m_zipFile.getEntry("META-INF/MANIFEST.MF");
Map<String, Object> manifest = manifestEntry != null ? BundleCache.getMainAttributes(new StringMap(), m_zipFile.getInputStream(manifestEntry), manifestEntry.getSize()) : null;
return manifest;
}
use of org.apache.felix.framework.util.StringMap in project felix by apache.
the class DirectoryRevision method getManifestHeader.
public synchronized Map<String, Object> getManifestHeader() throws Exception {
// Read the header file from the reference directory.
InputStream is = null;
try {
// Open manifest file.
is = BundleCache.getSecureAction().getFileInputStream(new File(m_refDir, "META-INF/MANIFEST.MF"));
// Error if no jar file.
if (is == null) {
throw new IOException("No manifest file found.");
}
// Get manifest.
Manifest mf = new Manifest(is);
// Create a case insensitive map of manifest attributes.
return new StringMap(mf.getMainAttributes());
} finally {
if (is != null)
is.close();
}
}
use of org.apache.felix.framework.util.StringMap in project felix by apache.
the class BundleImpl method getCurrentLocalizedHeader.
Map getCurrentLocalizedHeader(String locale) {
Map result = null;
// Spec says empty local returns raw headers.
if (locale.length() == 0) {
result = new StringMap(adapt(BundleRevisionImpl.class).getHeaders());
}
// If we have no result, try to get it from the cached headers.
if (result == null) {
synchronized (m_cachedHeaders) {
// the spec.
if (m_uninstalledHeaders != null) {
result = m_uninstalledHeaders;
} else // If the bundle has been updated, clear the cached headers.
if (getLastModified() > m_cachedHeadersTimestamp) {
m_cachedHeaders.clear();
} else // Otherwise, returned the cached headers if they exist.
{
// Check if headers for this locale have already been resolved
if (m_cachedHeaders.containsKey(locale)) {
result = (Map) m_cachedHeaders.get(locale);
}
}
}
}
// If the requested locale is not cached, then try to create it.
if (result == null) {
// Get a modifiable copy of the raw headers.
Map headers = new StringMap(adapt(BundleRevisionImpl.class).getHeaders());
// Assume for now that this will be the result.
result = headers;
// Check to see if we actually need to localize anything
boolean localize = false;
for (Iterator it = headers.values().iterator(); !localize && it.hasNext(); ) {
if (((String) it.next()).startsWith("%")) {
localize = true;
}
}
if (!localize) {
// If localization is not needed, just cache the headers and return
// them as-is. Not sure if this is useful
updateHeaderCache(locale, headers);
} else {
// Do localization here and return the localized headers
String basename = (String) headers.get(Constants.BUNDLE_LOCALIZATION);
if (basename == null) {
basename = Constants.BUNDLE_LOCALIZATION_DEFAULT_BASENAME;
}
// Create ordered list of revisions to search for localization
// property resources.
List<BundleRevision> revisionList = createLocalizationRevisionList(adapt(BundleRevisionImpl.class));
// Create ordered list of files to load properties from
List<String> resourceList = createLocalizationResourceList(basename, locale);
// Create a merged props file with all available props for this locale
boolean found = false;
Properties mergedProperties = new Properties();
for (BundleRevision br : revisionList) {
for (String res : resourceList) {
URL temp = ((BundleRevisionImpl) br).getEntry(res + ".properties");
if (temp != null) {
found = true;
try {
mergedProperties.load(temp.openConnection().getInputStream());
} catch (IOException ex) {
// File doesn't exist, just continue loop
}
}
}
}
// return the default localization.
if (!found && !locale.equals(Locale.getDefault().toString())) {
result = getCurrentLocalizedHeader(Locale.getDefault().toString());
} else // Otherwise, perform the localization based on the discovered
// properties and cache the result.
{
// Resolve all localized header entries
for (Iterator it = headers.entrySet().iterator(); it.hasNext(); ) {
Map.Entry entry = (Map.Entry) it.next();
String value = (String) entry.getValue();
if (value.startsWith("%")) {
String newvalue;
String key = value.substring(value.indexOf("%") + 1);
newvalue = mergedProperties.getProperty(key);
if (newvalue == null) {
newvalue = key;
}
entry.setValue(newvalue);
}
}
updateHeaderCache(locale, headers);
}
}
}
return result;
}
Aggregations