alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*******************************************************************************
 * Copyright (c) 2007, 2008 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.pde.api.tools.internal;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.internal.launching.EEVMType;
import org.eclipse.jdt.launching.LibraryLocation;
import org.eclipse.pde.api.tools.internal.provisional.Factory;
import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore;
import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
import org.eclipse.pde.api.tools.internal.provisional.IRequiredComponentDescription;
import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
import org.eclipse.pde.api.tools.internal.provisional.descriptors.IPackageDescriptor;

/**
 * An API component for a system library.
 * 
 * @since 1.0.0
 */
public class SystemLibraryApiComponent extends AbstractApiComponent {
	
	/**
	 * Execution environment profile symbolic name.
	 */
	private String[] fExecEnv;
	
	/**
	 * Associated library locations.
	 */
	private LibraryLocation[] fLibraries;
	
	/**
	 * Home directory
	 */
	private String fLocation;
	
	/**
	 * List of exported system packages
	 */
	private String[] fSystemPackages;
	
	/**
	 * Language level - i.e. 1.4, 1.5, etc.
	 */
	private String fVersion;
	
	/**
	 * Constructs a system library from the given execution environment description file.
	 * 
	 * @param profile owning profile
	 * @param description EE file
	 * @param systemPackages exported system packages
	 */
	public SystemLibraryApiComponent(IApiProfile profile, File description, String[] systemPackages) {
		super(profile);
		init(description);
		fSystemPackages = systemPackages;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.pde.api.tools.internal.descriptors.AbstractApiComponent#createApiDescription()
	 */
	protected IApiDescription createApiDescription() throws CoreException {
		IApiDescription api = new ApiDescription(getId());
		for (int i = 0; i < fSystemPackages.length; i++) {
			IPackageDescriptor pkg  = Factory.packageDescriptor(fSystemPackages[i]);
			api.setVisibility(pkg, VisibilityModifiers.API);
		}
		// have to fill in java.* as well
		String[] packageNames = getPackageNames();
		for (int i = 0; i < packageNames.length; i++) {
			if (packageNames[i].startsWith("java.")) { //$NON-NLS-1$
				IPackageDescriptor pkg  = Factory.packageDescriptor(packageNames[i]);
				api.setVisibility(pkg, VisibilityModifiers.API);
			}
		}
		return api;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.pde.api.tools.internal.AbstractApiComponent#createApiFilterStore()
	 */
	protected IApiFilterStore createApiFilterStore() {
		//TODO
		return null;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.pde.api.tools.internal.descriptors.AbstractApiComponent#createClassFileContainers()
	 */
	protected List createClassFileContainers() throws CoreException {
		List libs = new ArrayList(fLibraries.length);
		for (int i = 0; i < fLibraries.length; i++) {
			LibraryLocation lib = fLibraries[i];
			libs.add(new ArchiveClassFileContainer(lib.getSystemLibraryPath().toOSString(), null));
		}
		return libs;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.pde.api.tools.model.component.IApiComponent#getExecutionEnvironments()
	 */
	public String[] getExecutionEnvironments() {
		return fExecEnv;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.pde.api.tools.model.component.IApiComponent#getId()
	 */
	public String getId() {
		return fExecEnv[0];
	}
	
	/* (non-Javadoc)
	 * @see org.eclipse.pde.api.tools.model.component.IApiComponent#getLocation()
	 */
	public String getLocation() {
		return fLocation;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.pde.api.tools.model.component.IApiComponent#getName()
	 */
	public String getName() {
		return fExecEnv[0];
	}

	/* (non-Javadoc)
	 * @see org.eclipse.pde.api.tools.model.component.IApiComponent#getRequiredComponents()
	 */
	public IRequiredComponentDescription[] getRequiredComponents() {
		return new IRequiredComponentDescription[0];
	}

	/* (non-Javadoc)
	 * @see org.eclipse.pde.api.tools.model.component.IApiComponent#getVersion()
	 */
	public String getVersion() {
		return fVersion;
	}
	
	/**
	 * Initializes properties from the EE file.
	 * 
	 * @param description EE file
	 */
	private void init(File description) {
		EEVMType.clearProperties(description);
		fLibraries = EEVMType.getLibraryLocations(description);
		fExecEnv = new String[]{EEVMType.getProperty(EEVMType.PROP_CLASS_LIB_LEVEL, description)};
		fVersion = fExecEnv[0];
		fLocation = EEVMType.getProperty(EEVMType.PROP_JAVA_HOME, description);
	}

	/* (non-Javadoc)
	 * @see IApiComponent#isSourceComponent()
	 */
	public boolean isSourceComponent() {
		return false;
	}
	
	/* (non-Javadoc)
	 * @see org.eclipse.pde.api.tools.model.component.IApiComponent#isSystemComponent()
	 */
	public boolean isSystemComponent() {
		return true;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.pde.api.tools.IApiComponent#isFragment()
	 */
	public boolean isFragment() {
		return false;
	}
	
	/* (non-Javadoc)
	 * @see org.eclipse.pde.api.tools.IApiComponent#hasFragments()
	 */
	public boolean hasFragments() {
		return false;
	}

	public String getOrigin() {
		return null;
	}
}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.