/******************************************************************************* * Copyright (c) 2011 Gerd Wuetherich (gerd@gerd-wuetherich.de). * 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: * Gerd Wuetherich (gerd@gerd-wuetherich.de) - initial API and implementation ******************************************************************************/ package org.bundlemaker.core.internal.modules.modularizedsystem; import org.bundlemaker.core.analysis.IAnalysisModelConfiguration; import org.bundlemaker.core.analysis.IRootArtifact; import org.bundlemaker.core.analysis.algorithms.AdjacencyList; import org.bundlemaker.core.internal.analysis.ModelTransformerCache; import org.bundlemaker.core.internal.api.resource.IModifiableModule; import org.bundlemaker.core.internal.resource.ModuleIdentifier; import org.bundlemaker.core.project.BundleMakerProjectContentChangedEvent; import org.bundlemaker.core.project.BundleMakerProjectContentChangedEvent.Type; import org.bundlemaker.core.project.BundleMakerProjectDescriptionChangedEvent; import org.bundlemaker.core.project.BundleMakerProjectStateChangedEvent; import org.bundlemaker.core.project.IBundleMakerProjectChangedListener; import org.bundlemaker.core.project.IProjectContentEntry; import org.bundlemaker.core.resource.IModuleAwareBundleMakerProject; import org.bundlemaker.core.resource.IModuleResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.SubProgressMonitor; /** * <p> * </p> * * @author Gerd Wütherich (gerd@gerd-wuetherich.de) */ public class ModularizedSystem extends AbstractTransformationAwareModularizedSystem { /** - */ private ModelTransformerCache _transformerCache = null; /** - */ private IBundleMakerProjectChangedListener _changedListener; /** * <p> * Creates a new instance of type {@link ModularizedSystem}. * </p> * * @param name */ public ModularizedSystem(String name, IModuleAwareBundleMakerProject project) { super(name, project); // _transformerCache = new ModelTransformerCache(); // _changedListener = new IBundleMakerProjectChangedListener() { @Override public void projectStateChanged(BundleMakerProjectStateChangedEvent event) { System.out.println("***** projectStateChanged *****" + event.getNewState()); } @Override public void projectDescriptionChanged(BundleMakerProjectDescriptionChangedEvent event) { System.out.println("***** projectDescriptionChanged *****"); } @Override public void projectContentChanged(BundleMakerProjectContentChangedEvent event) { if (event.getType() == Type.REMOVED) { System.out.println("***** projectContentChanged - REMOVED *****"); IModuleResource moduleResource = (IModuleResource) event .getContentResource(); IModifiableModule modifiableModule = (IModifiableModule) getAssociatedResourceModule(moduleResource); if (modifiableModule != null && moduleResource.getMovableUnit() != null) { modifiableModule.removeMovableUnit(moduleResource.getMovableUnit()); } } else if (event.getType() == Type.ADDED) { System.out.println("***** projectContentChanged - ADDED *****"); // IModuleResource moduleResource = (IModuleResource) event .getContentResource(); // IProjectContentEntry entry = getBundleMakerProject().getProjectDescription().getProjectContentEntry( moduleResource.getProjectContentEntryId()); IModifiableModule module = getModifiableResourceModule(new ModuleIdentifier(entry .getName(), entry.getVersion())); // if (module != null && moduleResource.getMovableUnit() != null) { module.addMovableUnit(moduleResource.getMovableUnit()); // } } } }; project.addBundleMakerProjectChangedListener(_changedListener); } /** * {@inheritDoc} */ @Override public <T> T adaptAs(Class<T> clazz) { // T result = (T) Platform.getAdapterManager().getAdapter(this, clazz); if (result != null) { return result; } // if (clazz.isAssignableFrom(this.getClass())) { return (T) this; } // return null; } /** * {@inheritDoc} */ @Override public Object getAdapter(Class adapter) { return adaptAs(adapter); } /** * {@inheritDoc} */ public IRootArtifact getAnalysisModel(IAnalysisModelConfiguration configuration) { return (IRootArtifact) _transformerCache.getArtifactModel(this, configuration, null); } /** * {@inheritDoc} */ public IRootArtifact getAnalysisModel(IAnalysisModelConfiguration configuration, IProgressMonitor progressMonitor) { // if (progressMonitor == null) { progressMonitor = new NullProgressMonitor(); } // try { // progressMonitor.beginTask("Creating analysis model...", 201); progressMonitor.subTask("Transforming..."); progressMonitor.worked(1); // IRootArtifact root = (IRootArtifact) _transformerCache.getArtifactModel(this, configuration, new SubProgressMonitor(progressMonitor, 100)); // pre initialize progressMonitor.subTask("Initializing..."); AdjacencyList.computeAdjacencyList(root.getChildren(), new SubProgressMonitor(progressMonitor, 100)); // return root; } finally { progressMonitor.done(); } } }