use of org.eclipse.osgi.storage.BundleInfo.Generation in project rt.equinox.framework by eclipse.
the class Storage method refresh.
private void refresh(Module module) throws BundleException {
ModuleRevision current = module.getCurrentRevision();
Generation currentGen = (Generation) current.getRevisionInfo();
File content = currentGen.getContent();
// $NON-NLS-1$ //$NON-NLS-2$
String spec = (currentGen.isReference() ? "reference:" : "") + content.toURI().toString();
URLConnection contentConn;
try {
contentConn = getContentConnection(spec);
} catch (IOException e) {
// $NON-NLS-1$
throw new BundleException("Error reading bundle content.", e);
}
update(module, contentConn);
}
use of org.eclipse.osgi.storage.BundleInfo.Generation in project rt.equinox.framework by eclipse.
the class Storage method getUpdateLocation0.
String getUpdateLocation0(Module module) {
ModuleRevision current = module.getCurrentRevision();
Generation generation = (Generation) current.getRevisionInfo();
String updateLocation = generation.getHeaders().get(Constants.BUNDLE_UPDATELOCATION);
if (updateLocation == null) {
updateLocation = module.getLocation();
}
if (updateLocation.startsWith(INITIAL_LOCATION)) {
updateLocation = updateLocation.substring(INITIAL_LOCATION.length());
}
return updateLocation;
}
use of org.eclipse.osgi.storage.BundleInfo.Generation in project rt.equinox.framework by eclipse.
the class Storage method close.
public void close() {
try {
save();
} catch (IOException e) {
// $NON-NLS-1$
getLogServices().log(EquinoxContainer.NAME, FrameworkLogEntry.ERROR, "Error saving on shutdown", e);
}
// close all the generations
List<Module> modules = moduleContainer.getModules();
for (Module module : modules) {
for (ModuleRevision revision : module.getRevisions().getModuleRevisions()) {
Generation generation = (Generation) revision.getRevisionInfo();
if (generation != null) {
generation.close();
}
}
}
for (ModuleRevision removalPending : moduleContainer.getRemovalPending()) {
Generation generation = (Generation) removalPending.getRevisionInfo();
if (generation != null) {
generation.close();
}
}
mruList.shutdown();
adaptor.shutdownResolverExecutor();
}
use of org.eclipse.osgi.storage.BundleInfo.Generation in project rt.equinox.framework by eclipse.
the class Storage method loadStorageHookData.
private void loadStorageHookData(List<Generation> generations, DataInputStream in) throws IOException {
List<StorageHookFactory<?, ?, ?>> factories = new ArrayList<>(getConfiguration().getHookRegistry().getStorageHookFactories());
Map<Generation, List<StorageHook<?, ?>>> hookMap = new HashMap<>();
int numFactories = in.readInt();
for (int i = 0; i < numFactories; i++) {
String factoryName = in.readUTF();
int version = in.readInt();
StorageHookFactory<Object, Object, StorageHook<Object, Object>> factory = null;
for (Iterator<StorageHookFactory<?, ?, ?>> iFactories = factories.iterator(); iFactories.hasNext(); ) {
@SuppressWarnings("unchecked") StorageHookFactory<Object, Object, StorageHook<Object, Object>> next = (StorageHookFactory<Object, Object, StorageHook<Object, Object>>) iFactories.next();
if (next.getKey().equals(factoryName)) {
factory = next;
iFactories.remove();
break;
}
}
int dataSize = in.readInt();
byte[] bytes = new byte[dataSize];
in.readFully(bytes);
if (factory != null) {
DataInputStream temp = new DataInputStream(new ByteArrayInputStream(bytes));
try {
if (factory.isCompatibleWith(version)) {
Object loadContext = factory.createLoadContext(version);
for (Generation generation : generations) {
if (generation.getBundleInfo().getBundleId() == 0) {
// ignore system bundle
continue;
}
StorageHook<Object, Object> hook = factory.createStorageHookAndValidateFactoryClass(generation);
hook.load(loadContext, temp);
getHooks(hookMap, generation).add(hook);
}
} else {
// recover by reinitializing the hook
for (Generation generation : generations) {
if (generation.getBundleInfo().getBundleId() == 0) {
// ignore system bundle
continue;
}
StorageHook<Object, Object> hook = factory.createStorageHookAndValidateFactoryClass(generation);
hook.initialize(generation.getHeaders());
getHooks(hookMap, generation).add(hook);
}
}
} catch (BundleException e) {
throw new IOException(e);
} finally {
temp.close();
}
}
}
// now we need to recover for any hooks that are left
for (Iterator<StorageHookFactory<?, ?, ?>> iFactories = factories.iterator(); iFactories.hasNext(); ) {
@SuppressWarnings("unchecked") StorageHookFactory<Object, Object, StorageHook<Object, Object>> next = (StorageHookFactory<Object, Object, StorageHook<Object, Object>>) iFactories.next();
// recover by reinitializing the hook
for (Generation generation : generations) {
if (generation.getBundleInfo().getBundleId() == 0) {
// ignore system bundle
continue;
}
StorageHook<Object, Object> hook = next.createStorageHookAndValidateFactoryClass(generation);
try {
hook.initialize(generation.getHeaders());
getHooks(hookMap, generation).add(hook);
} catch (BundleException e) {
throw new IOException(e);
}
}
}
// now set the hooks to the generations
for (Generation generation : generations) {
generation.setStorageHooks(Collections.unmodifiableList(getHooks(hookMap, generation)), false);
}
}
use of org.eclipse.osgi.storage.BundleInfo.Generation in project rt.equinox.framework by eclipse.
the class BundleContextImpl method installBundle.
public Bundle installBundle(String location, InputStream in) throws BundleException {
checkValid();
try {
URLConnection content = container.getStorage().getContentConnection(null, location, in);
Generation generation = container.getStorage().install(bundle.getModule(), location, content);
return generation.getRevision().getBundle();
} catch (IOException e) {
// $NON-NLS-1$
throw new BundleException("Error reading bundle content.", e);
}
}
Aggregations