blob: b40878a8f8c5bd7a3ff1824fb80be87675f66a6e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2008 Oracle Corporation and others.
* 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:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.designtime.internal.view.model.jsp.persistence;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.Namespace;
import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.TLDNamespace;
import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.TLDNamespace.TLDNamespaceData;
/**
* A serializable tld namespace. This is distinct from TLDNamespace in that it
* takes a snapshot of a TLDNamespace at a point in time. Any elements not
* lazily resolved by the TLDNamespace will not be resolved by this namespace.
*
*/
public class SerializableTLDNamespace extends Namespace
{
private final SerializedNamespaceData _data;
/**
* @param namespace
*/
public SerializableTLDNamespace(final TLDNamespace namespace)
{
_data = new SerializedNamespaceData(namespace.getDisplayName(),
namespace.getCurrentElements(), namespace.getNSUri());
}
/**
*
*/
private static final long serialVersionUID = 5364814479459691353L;
@Override
public String getDisplayName()
{
return _data.getDisplayName();
}
@Override
public String getNSUri()
{
return _data.getUri();
}
@Override
public ITagElement getViewElement(String name)
{
return _data.getViewElement(name);
}
@Override
public Collection<? extends ITagElement> getViewElements()
{
return Collections.unmodifiableCollection(_data.getAllViewElements()
.values());
}
@Override
public boolean hasViewElements()
{
return _data.getNumTags() > 0;
}
@Override
public boolean isInitialized()
{
return _data.isInitialized();
}
/* package */void put(final String name, final ITagElement tagElement)
{
_data._tags.put(name, tagElement);
}
private static class SerializedNamespaceData extends TLDNamespaceData
{
/**
* serializable id
*/
private static final long serialVersionUID = -6723194339788215607L;
private final String _displayName;
private final String _uri;
private final Map<String, ITagElement> _tags;
/**
* @param displayName
* @param tags
* @param uri
*/
private SerializedNamespaceData(String displayName,
Map<String, ITagElement> tags, String uri)
{
super();
_displayName = displayName;
_tags = new HashMap<String, ITagElement>();
for (final Map.Entry<String, ITagElement> tagEntry : tags.entrySet())
{
_tags.put(tagEntry.getKey(), tagEntry.getValue());
}
_uri = uri;
}
@Override
public String getDisplayName()
{
return _displayName;
}
@Override
public int getNumTags()
{
return _tags.size();
}
@Override
public ITagElement getViewElement(String name)
{
return _tags.get(name);
}
@Override
public String getUri()
{
return _uri;
}
@Override
public Map<String, ITagElement> getAllViewElements()
{
return _tags;
}
@Override
public boolean isInitialized()
{
return true;
}
@Override
public Map<String, ITagElement> getCurrentElements()
{
return _tags;
}
}
}