/******************************************************************************* * 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.core.event; import java.util.ArrayList; import java.util.EventObject; import java.util.List; import org.jboss.tools.common.model.project.ext.event.Change; import org.jboss.tools.common.model.project.ext.event.IChangeVisitor; import org.jboss.tools.seam.core.ISeamComponent; import org.jboss.tools.seam.core.ISeamProject; /** * @author Viacheslav Kabanovich */ public class SeamProjectChangeEvent extends EventObject { private static final long serialVersionUID = 1L; /** * Modified seam project. */ ISeamProject project; /** * List of structured changes. */ List<Change> changes; public SeamProjectChangeEvent(ISeamProject project, List<Change> changes) { super(project); this.project = project; this.changes = changes; } /** * Returns modified seam project * @return */ public ISeamProject getProject() { return project; } /** * Returns all changes * @return */ public List<Change> getAllChanges() { return changes; } /** * Invokes visitor for each change, which result in iteration over * tree of changes when * @param visitor */ public void visit(IChangeVisitor visitor) { if(changes != null) for (Change c: changes) { c.visit(visitor); } } /** * Utility method, returns all components that have been modified. * The list does not include removed and added components. * This method makes an example of using visitors to process * seam project events. * * @return */ public List<ISeamComponent> getAllModifiedComponents() { final List<ISeamComponent> list = new ArrayList<ISeamComponent>(); visit(new IChangeVisitor() { public boolean visit(Change change) { Object t = change.getTarget(); if(t instanceof ISeamComponent) { list.add((ISeamComponent)t); } else if(t instanceof ISeamProject) { return true; } return false; } }); return list; } }