/******************************************************************************* * Copyright (c) 2008 Oracle Corporation. * 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: * Cameron Bateman - initial API and implementation *******************************************************************************/ package org.eclipse.jst.jsf.facelet.core.internal.registry.taglib; import java.util.Collection; import java.util.concurrent.CopyOnWriteArrayList; import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib.FaceletTaglibTag; /** * Super of all facelet tag records. * * @author cbateman * */ public abstract class FaceletTagRecord implements IFaceletTagRecord { private final CopyOnWriteArrayList<ITagRecordChangeListener> _listeners; private final TagRecordDescriptor _descriptor; /** * @param descriptor * */ public FaceletTagRecord(final TagRecordDescriptor descriptor) { _listeners = new CopyOnWriteArrayList<ITagRecordChangeListener>(); _descriptor = descriptor; } public TagRecordDescriptor getDescriptor() { return _descriptor; } public void addListener(final ITagRecordChangeListener listener) { _listeners.addIfAbsent(listener); } public void removeListener(final ITagRecordChangeListener listener) { _listeners.remove(listener); } /** * @param event */ protected void fireEvent(final TagRecordChangeEvent event) { for (final ITagRecordChangeListener listener : _listeners) { listener.changed(event); } } /** * */ private static final long serialVersionUID = -4606745577562951499L; public abstract String getURI(); public abstract FaceletTaglibTag getTag(final String name); public abstract Collection<? extends FaceletTaglibTag> getTags(); }