m_metadata.setCoreVersion(info.metadata.getCoreVersion());
}
if (info.ref == null)
{
throw new MetadataValidationException("err.meta.mixinNamespace", new Object[]{info.metadata.getName(), sNamespace});
}
String sVersion = info.ref.getVersion();
String sChecksum = info.ref.getChecksum();
// validate that repository matches mixin declaration
if ((sVersion != null && !sVersion.equals(info.metadata.getVersion()))
|| (sChecksum != null && !sChecksum.equals(info.metadata.getChecksum())))
{
throw new MetadataValidationException("err.meta.mixinLinkVersion", new Object[]{
info.metadata.getName(),
info.metadata.getVersion(),
info.metadata.getChecksum(),
sVersion,
sChecksum,
getMetadataName(info.parentNamespace)
});
}
}
}
public void handleMixinReference(XMLMixin ref, XMLMixin parent)
{
String sParentNamespace = parent.getNamespace();
String sNamespace = ref.getNamespace();
String sVersion = ref.getVersion();
String sChecksum = ref.getChecksum();
MetadataInfo info = (MetadataInfo)m_metadataMap.get(sNamespace);
if (info == null)
{
info = new MetadataInfo();
info.parentNamespace = sParentNamespace;
info.ref = (XMLMixin)ref.clone();
m_metadataMap.put(sNamespace, info);
// mixin declared at top-level is also base
if (sParentNamespace.equals(m_metadata.getNamespace()) && sNamespace.equals(m_metadata.getBaseNamespace()))
{
m_helper.addException(new MetadataValidationException("err.meta.mixinDup",
new Object[] {sNamespace, getMetadataName(sParentNamespace)}));
}
// mixin matches base, but has different version/checksum
if (sNamespace.equals(m_metadata.getBaseNamespace()) &&
(!sVersion.equals(m_metadata.getBaseVersion()) || !sChecksum.equals(m_metadata.getBaseChecksum())))
{
m_helper.addException(new MetadataValidationException("err.meta.mixinBaseVersion",
new Object[]{sNamespace, sVersion, sChecksum, m_metadata.getBaseVersion(), m_metadata.getBaseChecksum()}));
}
}
else if (info.ref != null)
{
if (sParentNamespace.equals(info.parentNamespace))
{
// mixin declared twice in same repository
m_helper.addException(new MetadataValidationException("err.meta.mixinDup",
new Object[] {sNamespace, getMetadataName(sParentNamespace)}));
}
// mixin declared more than once with different version/checksum
if ((info.ref.getVersion() != null && !info.ref.getVersion().equals(sVersion)) ||
(info.ref.getChecksum() != null && !info.ref.getChecksum().equals(sChecksum)))
{
m_helper.addException(new MetadataValidationException("err.meta.mixinVersion", new Object[] {
sNamespace,
sVersion,
sChecksum,
getMetadataName(sParentNamespace),
info.ref.getVersion(),
info.ref.getChecksum(),
getMetadataName(info.parentNamespace)
}));
}
}
}
public void handleMixinOverrideConflict(XMLMixin ref, XMLMixin mixin)
{
throw new MetadataValidationException("err.meta.mixinOverride", new Object[]{ref.getName(), mixin.getName()});
}
public void handleCircularReference(XMLMixin mixin)
{
throw new MetadataValidationException("err.meta.mixinCycle", new Object[]{mixin.getName()});
}
public void handleResourceConflict(XMLResource first, XMLResource second)
{
m_helper.addException(new MetadataValidationException("err.meta.mixinConflict",
new Object[]{
first.getName(),
getMetadataName(first.getNamespace()),
getMetadataName(second.getNamespace())
}));