/******************************************************************************* * Copyright (c) 2007 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.seam.internal.core; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jboss.tools.common.model.project.ext.event.Change; import org.jboss.tools.seam.core.ISeamComponent; import org.jboss.tools.seam.core.ISeamPackage; import org.jboss.tools.seam.core.ISeamScope; import org.jboss.tools.seam.core.ScopeType; public class SeamScope extends SeamObject implements ISeamScope { //Contains all components for that scope. private Map<String,SeamComponent> componentMap = new HashMap<String, SeamComponent>(); private List<ISeamComponent> components = new ArrayList<ISeamComponent>(); private ScopeType scopeType = null; //Contains first level packages for that scope Map<String, ISeamPackage> packages = new HashMap<String, ISeamPackage>(); SeamScope(SeamProject project, ScopeType scopeType) { setParent(project); this.scopeType = scopeType; } public List<ISeamComponent> getComponents() { return components; } public Collection<ISeamPackage> getPackages() { synchronized(packages) { return packages.values(); } } public Collection<ISeamPackage> getAllPackages() { List<ISeamPackage> list = new ArrayList<ISeamPackage>(); SeamPackageUtil.collectAllPackages(packages, list); return list; } public ISeamPackage getPackage(ISeamComponent c) { String pkg = SeamPackageUtil.getPackageName(c); return SeamPackageUtil.findPackage(this, packages, pkg); } public void addComponent(SeamComponent component) { components.add(component); componentMap.put(component.getName(), component); } public void removeComponent(ISeamComponent component) { components.remove(component); componentMap.remove(component.getName()); } public ScopeType getType() { return scopeType; } void revalidatePackages() { List<Change> changes = SeamPackageUtil.revalidatePackages(this, componentMap, getComponents(), packages); ((SeamProject)getSeamProject()).fireChanges(changes, false); } public void validatePackage(SeamComponent c) { SeamPackage p = (SeamPackage)SeamPackageUtil.findOrCreatePackage(this, packages, SeamPackageUtil.getPackageName(c)); c.setScopePackage(p); p.getComponents().add(c); } public void removePackage(ISeamPackage p) { synchronized(packages) { packages.remove(p.getName()); } } }