blob: 3223b57771cdf704bef47cc47e86f9f683b97262 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.osgi.internal.resolver;
import java.io.*;
import java.util.Dictionary;
import org.eclipse.osgi.service.resolver.*;
import org.osgi.framework.BundleException;
public class StateObjectFactoryImpl implements StateObjectFactory {
public BundleDescription createBundleDescription(Dictionary manifest, String location, long id) throws BundleException {
BundleDescriptionImpl result;
result = (BundleDescriptionImpl) StateBuilder.createBundleDescription(manifest, location);
result.setBundleId(id);
return result;
}
public BundleDescription createBundleDescription(long id, String symbolicName, Version version, String location, BundleSpecification[] required, HostSpecification host, PackageSpecification[] packages, String[] providedPackages, boolean singleton) {
BundleDescriptionImpl bundle = new BundleDescriptionImpl();
bundle.setBundleId(id);
bundle.setUniqueId(symbolicName);
bundle.setVersion(version);
bundle.setLocation(location);
bundle.setRequiredBundles(required);
bundle.setPackages(packages);
bundle.setHost(host);
bundle.setProvidedPackages(providedPackages);
bundle.setSingleton(singleton);
return bundle;
}
public BundleDescription createBundleDescription(long id, String symbolicName, Version version, String location, BundleSpecification[] required, HostSpecification[] hosts, PackageSpecification[] packages, String[] providedPackages, boolean singleton) {
HostSpecification host = hosts == null || hosts.length == 0 ? null : hosts[1];
return createBundleDescription(id, symbolicName, version, location, required, host, packages, providedPackages, singleton);
}
public BundleDescription createBundleDescription(BundleDescription original) {
BundleDescriptionImpl bundle = new BundleDescriptionImpl();
bundle.setBundleId(original.getBundleId());
bundle.setUniqueId(original.getUniqueId());
bundle.setVersion(original.getVersion());
bundle.setLocation(original.getLocation());
BundleSpecification[] originalRequired = original.getRequiredBundles();
BundleSpecification[] newRequired = new BundleSpecification[originalRequired.length];
for (int i = 0; i < newRequired.length; i++)
newRequired[i] = createBundleSpecification(originalRequired[i]);
bundle.setRequiredBundles(newRequired);
PackageSpecification[] originalPackages = original.getPackages();
PackageSpecification[] newPackages = new PackageSpecification[originalPackages.length];
for (int i = 0; i < newPackages.length; i++)
newPackages[i] = createPackageSpecification(originalPackages[i]);
bundle.setPackages(newPackages);
if (original.getHost() != null)
bundle.setHost(createHostSpecification(original.getHost()));
String[] originalProvidedPackages = original.getProvidedPackages();
String[] newProvidedPackages = new String[originalProvidedPackages.length];
System.arraycopy(originalProvidedPackages, 0, newProvidedPackages, 0, originalProvidedPackages.length);
bundle.setProvidedPackages(newProvidedPackages);
bundle.setSingleton(original.isSingleton());
return bundle;
}
public BundleSpecification createBundleSpecification(String requiredSymbolicName, Version requiredVersion, byte matchingRule, boolean export, boolean optional) {
BundleSpecificationImpl bundleSpec = new BundleSpecificationImpl();
bundleSpec.setName(requiredSymbolicName);
bundleSpec.setVersionSpecification(requiredVersion);
bundleSpec.setMatchingRule(matchingRule);
bundleSpec.setExported(export);
bundleSpec.setOptional(optional);
return bundleSpec;
}
public BundleSpecification createBundleSpecification(BundleSpecification original) {
BundleSpecificationImpl bundleSpec = new BundleSpecificationImpl();
bundleSpec.setName(original.getName());
bundleSpec.setVersionSpecification(original.getVersionSpecification());
bundleSpec.setMatchingRule(original.getMatchingRule());
bundleSpec.setExported(original.isExported());
bundleSpec.setOptional(original.isOptional());
return bundleSpec;
}
public HostSpecification createHostSpecification(String hostSymbolicName, Version hostVersion, byte matchingRule, boolean reloadHost) {
HostSpecificationImpl hostSpec = new HostSpecificationImpl();
hostSpec.setName(hostSymbolicName);
hostSpec.setVersionSpecification(hostVersion);
hostSpec.setMatchingRule(matchingRule);
hostSpec.setReloadHost(reloadHost);
return hostSpec;
}
public HostSpecification createHostSpecification(HostSpecification original) {
HostSpecificationImpl hostSpec = new HostSpecificationImpl();
hostSpec.setName(original.getName());
hostSpec.setVersionSpecification(original.getVersionSpecification());
hostSpec.setMatchingRule(original.getMatchingRule());
hostSpec.setReloadHost(original.reloadHost());
return hostSpec;
}
public PackageSpecification createPackageSpecification(String packageName, Version packageVersion, boolean exported) {
PackageSpecificationImpl packageSpec = new PackageSpecificationImpl();
packageSpec.setName(packageName);
packageSpec.setVersionSpecification(packageVersion);
packageSpec.setExport(exported);
return packageSpec;
}
public PackageSpecification createPackageSpecification(PackageSpecification original) {
PackageSpecificationImpl packageSpec = new PackageSpecificationImpl();
packageSpec.setName(original.getName());
packageSpec.setVersionSpecification(original.getVersionSpecification());
packageSpec.setExport(original.isExported());
return packageSpec;
}
public SystemState createSystemState() {
SystemState state = new SystemState();
state.setFactory(this);
return state;
}
public State createState() {
StateImpl state = new UserState();
state.setFactory(this);
return state;
}
public State createState(State original) {
StateImpl newState = new UserState();
newState.setFactory(this);
newState.setTimeStamp(original.getTimeStamp());
BundleDescription[] bundles = original.getBundles();
for (int i = 0; i < bundles.length; i++)
newState.basicAddBundle(createBundleDescription(bundles[i]));
newState.setResolved(false);
return newState;
}
public SystemState readSystemState(DataInputStream stream, long expectedTimeStamp) throws IOException {
StateReader reader = new StateReader();
SystemState restoredState = new SystemState();
if (!reader.loadState(restoredState, stream, expectedTimeStamp))
return null;
restoredState.setFactory(this);
return restoredState;
}
public State readState(DataInputStream stream) throws IOException {
StateReader reader = new StateReader();
StateImpl restoredState = (StateImpl) createState();
if (!reader.loadState(restoredState, stream))
return null;
return restoredState;
}
public void writeState(State state, DataOutputStream stream) throws IOException {
if (state.getFactory() != this)
throw new IllegalArgumentException();
StateWriter writer = new StateWriter();
writer.saveState((StateImpl) state, stream);
}
}