| /******************************************************************************* |
| * Copyright (c) 2004, 2007 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.core.tools.metadata; |
| |
| import java.io.*; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.osgi.service.resolver.*; |
| |
| public class StateDumper extends AbstractDumper { |
| |
| @Override |
| protected void dumpContents(PushbackInputStream input, StringBuilder contents) throws IOException, Exception, DumpException { |
| PlatformAdmin admin = Platform.getPlatformAdmin(); |
| // use the deprecated API to support running against a 3.0 Eclipse |
| State state = admin.getFactory().readState(new DataInputStream(input)); |
| if (state==null){ |
| contents.append("Unable to read state file."); |
| return; |
| } |
| contents.append("State resolved: "); //$NON-NLS-1$ |
| contents.append(state.isResolved()); |
| contents.append("\n"); //$NON-NLS-1$ |
| BundleDescription[] allBundles = state.getBundles(); |
| admin.getStateHelper().sortBundles(allBundles); |
| for (BundleDescription allBundle : allBundles) |
| dumpBundle(allBundle, contents); |
| } |
| |
| private void dumpBundle(BundleDescription bundle, StringBuilder contents) { |
| contents.append("\n"); //$NON-NLS-1$ |
| contents.append("Bundle: "); //$NON-NLS-1$ |
| contents.append(bundle.getSymbolicName()); |
| contents.append('_'); |
| contents.append(bundle.getVersion()); |
| contents.append(" ("); //$NON-NLS-1$ |
| contents.append(bundle.isResolved() ? "resolved" : "unresolved"); //$NON-NLS-1$ //$NON-NLS-2$ |
| if (bundle.isSingleton()) |
| contents.append(", singleton"); //$NON-NLS-1$ |
| contents.append(")\n"); //$NON-NLS-1$ |
| HostSpecification host = bundle.getHost(); |
| if (host != null) |
| dumpHost(host, contents); |
| BundleSpecification[] required = bundle.getRequiredBundles(); |
| for (BundleSpecification element : required) |
| dumpRequired(element, contents); |
| } |
| |
| private void dumpRequired(BundleSpecification required, StringBuilder contents) { |
| contents.append("\tRequired: "); //$NON-NLS-1$ |
| contents.append(required.getName()); |
| contents.append(" - Version: "); //$NON-NLS-1$ |
| contents.append(required.getVersionRange()); |
| contents.append(" ("); //$NON-NLS-1$ |
| contents.append(required.isResolved() ? ("actual: " + required.getSupplier().getVersion().toString()) : "unresolved"); //$NON-NLS-1$ //$NON-NLS-2$ |
| if (required.isOptional()) |
| contents.append(", optional"); //$NON-NLS-1$ |
| contents.append(')'); |
| contents.append('\n'); |
| } |
| |
| private void dumpHost(HostSpecification host, StringBuilder contents) { |
| contents.append("\tHost: "); //$NON-NLS-1$ |
| contents.append(host.getName()); |
| contents.append(" - Version: "); //$NON-NLS-1$ |
| contents.append(host.getVersionRange()); |
| contents.append(" ("); //$NON-NLS-1$ |
| contents.append(host.isResolved() ? ("actual: " + host.getSupplier().getVersion().toString()) : "unresolved"); //$NON-NLS-1$ //$NON-NLS-2$ |
| contents.append(')'); |
| contents.append('\n'); |
| } |
| } |