package org.bundlemaker.core.internal.analysis; import org.bundlemaker.core.analysis.IAnalysisModelVisitor; import org.bundlemaker.core.analysis.IBundleMakerArtifact; import org.bundlemaker.core.analysis.IModuleArtifact; import org.bundlemaker.core.analysis.IPackageArtifact; import org.bundlemaker.core.analysis.IResourceArtifact; import org.bundlemaker.core.internal.analysis.cache.ArtifactCache; import org.bundlemaker.core.resource.IModule; import org.bundlemaker.core.spi.analysis.AbstractArtifactContainer; import org.eclipse.core.runtime.Assert; /** * <p> * </p> * * @author Gerd Wütherich (gerd@gerd-wuetherich.de) */ public class AdapterPackage2IArtifact extends AbstractPackageFilteringArtifact implements IPackageArtifact { /** - */ private String _qualifiedName; /** - */ private boolean _isVirtual; /** - */ private boolean _isHierarchical; /** - */ private IModule _containingModule; /** * <p> * Creates a new instance of type {@link AdapterPackage2IArtifact}. * </p> * * @param qualifiedName * @param parent */ public AdapterPackage2IArtifact(String qualifiedName, IBundleMakerArtifact parent, boolean isVirtual, boolean isHierarchical, IModule containingModule, ArtifactCache artifactCache) { super(_getName(qualifiedName)); // set parent/children dependency if (parent != null) { setParent(parent); ((AbstractArtifactContainer) parent).getModifiableChildrenCollection().add(this); } Assert.isNotNull(qualifiedName); // set the qualified name _qualifiedName = qualifiedName; _isVirtual = isVirtual; _containingModule = containingModule; _isHierarchical = isHierarchical; } /** * {@inheritDoc} */ @Override public String getUniquePathIdentifier() { return _isHierarchical ? getName() : getQualifiedName(); } /** * {@inheritDoc} */ @Override public boolean isVirtual() { return _isVirtual; } /** * {@inheritDoc} */ @Override public boolean isMovable() { // IBundleMakerArtifact artifact = getParent(IModuleArtifact.class); // return artifact instanceof IModuleArtifact && ((IModuleArtifact) artifact).getAssociatedModule().isResourceModule(); } /** * {@inheritDoc} */ @Override public String getQualifiedName() { return _qualifiedName; } /* * (non-Javadoc) * * @see org.bundlemaker.core.analysis.IPackageArtifact#getPackageName() */ @Override public String getPackageName() { return _qualifiedName; } @Override public String handleCanAdd(IBundleMakerArtifact artifact) { // IResourceArtifact resourceArtifact = artifact instanceof IResourceArtifact ? (IResourceArtifact) artifact : artifact .getParent(IResourceArtifact.class); // if (resourceArtifact != null) { String packageName = resourceArtifact.getAssociatedResource() .getDirectory().replace('/', '.'); if (!packageName.equals(this.getQualifiedName())) { return String.format("Can not add resource '%s' to package '%s'.", artifact.getQualifiedName(), packageName); } else { return null; } } // if (artifact.isInstanceOf(ITypeArtifact.class)) { // String packageName = ((ITypeArtifact) artifact).getAssociatedType().getPackageName(); // if (!packageName.equals(this.getQualifiedName())) { // return String.format("Can not add type '%s' to package '%s'.", artifact.getQualifiedName(), packageName); // } else { // return null; // } // } // handle packages if (artifact.isInstanceOf(IPackageArtifact.class)) { // // // if (getConfiguration().isHierarchicalPackages()) { // // IPackageArtifact packageArtifact = ((IPackageArtifact) artifact); // int index = packageArtifact.getQualifiedName().lastIndexOf("."); // String parentPackageName = index != -1 ? packageArtifact.getQualifiedName().substring(0, index) // : packageArtifact // .getQualifiedName(); // // if (parentPackageName.equals(this.getQualifiedName())) { // return null; // } // } // return String.format("Can not add package '%s (%s)' to package '%s (%s)'.", artifact.getQualifiedName(), artifact.getParent(IModuleArtifact.class), this.getQualifiedName(), this.getParent(IModuleArtifact.class)); } // fail return String.format("Can not handle artifact '%s'.", artifact.getQualifiedName()); } /** * <p> * </p> * * @return */ public final IModule getContainingModule() { return _containingModule; } @Override protected void onRemoveArtifact(IBundleMakerArtifact artifact) { // asserts Assert.isNotNull(artifact); // TODO: IS THIS CORRECT ?? AdapterUtils.removeArtifact(artifact, this); } @Override protected String getArtifactType() { return "package"; } /** * {@inheritDoc} */ @Override public void accept(IAnalysisModelVisitor visitor) { // if (visitor.visit(this)) { // for (IBundleMakerArtifact artifact : getChildren()) { ((IBundleMakerArtifact) artifact).accept(visitor); } } } /** * <p> * </p> * * @param qualifiedName * @return */ public static String _getName(String qualifiedName) { return qualifiedName.indexOf('.') != -1 ? qualifiedName.substring(qualifiedName.lastIndexOf('.') + 1) : qualifiedName; } }