ACE-4752 dynamic type filter creation - fixed invalid or missing namespace bug

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@119652 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Bogdan Horje
2015-12-04 14:36:11 +00:00
parent cc4aab7119
commit 4028bb28a2
2 changed files with 36 additions and 64 deletions

View File

@@ -69,19 +69,6 @@ public class TypeVirtualizationMethod extends TemplateVirtualizationMethod
private NodeRefExpression templatesPath;
private QNamePattern[] qnamePatternFilters = new QNamePattern[] { RegexQNamePattern.MATCH_ALL };
private static final QNamePattern MATCH_NONE = new QNamePattern()
{
@Override
public boolean isMatch(QName qname)
{
return false;
}
};
private String filters;
/**
@@ -99,14 +86,16 @@ public class TypeVirtualizationMethod extends TemplateVirtualizationMethod
public void init()
{
resetFilters();
// resetFilters();
}
private synchronized void resetFilters()
private QNamePattern[] createFilters()
{
QNamePattern[] qnamePatternFilters = new QNamePattern[] {};
if (namespacePrefixResolver != null && filters != null)
{
this.qnamePatternFilters = asRegExpQNamePatternFilters(filters);
qnamePatternFilters = asRegExpQNamePatternFilters(filters);
if (logger.isDebugEnabled())
{
String regExpFilters = "";
@@ -123,6 +112,7 @@ public class TypeVirtualizationMethod extends TemplateVirtualizationMethod
+ " and filters=" + filters);
}
return qnamePatternFilters;
}
private QNamePattern[] asRegExpQNamePatternFilters(String filtersString)
@@ -144,7 +134,6 @@ public class TypeVirtualizationMethod extends TemplateVirtualizationMethod
if ("none".equals(trimmedFilters))
{
patterns.clear();
patterns.add(MATCH_NONE);
break;
}
@@ -189,17 +178,23 @@ public class TypeVirtualizationMethod extends TemplateVirtualizationMethod
}
catch (NamespaceException e)
{
throw new IllegalArgumentException("Illegal filters string " + filtersString
+ " due to unregistered name space in " + filters[i],
if (logger.isDebugEnabled())
{
logger.debug("Illegal filters string " + filtersString + " due to unregistered name space in "
+ filters[i],
e);
}
}
catch (PatternSyntaxException e)
{
throw new IllegalArgumentException("Illegal filters string " + filtersString
+ " due to invalid regexp translatrion in " + filters[i],
if (logger.isDebugEnabled())
{
logger.debug("Illegal filters string " + filtersString
+ " due to invalid regexp translation in " + filters[i],
e);
}
}
}
}
@@ -211,8 +206,6 @@ public class TypeVirtualizationMethod extends TemplateVirtualizationMethod
ParameterCheck.mandatoryString("filters",
filters);
this.filters = filters;
resetFilters();
}
public void setTemplatesPath(NodeRefExpression templatesPath)
@@ -223,8 +216,6 @@ public class TypeVirtualizationMethod extends TemplateVirtualizationMethod
public void setNamespacePrefixResolver(NamespacePrefixResolver resolver)
{
this.namespacePrefixResolver = resolver;
resetFilters();
}
@Override
@@ -259,9 +250,10 @@ public class TypeVirtualizationMethod extends TemplateVirtualizationMethod
private boolean isAnyFilterMatch(QName qname)
{
for (int i = 0; i < qnamePatternFilters.length; i++)
QNamePattern[] syncFilters = createFilters();
for (int i = 0; i < syncFilters.length; i++)
{
if (qnamePatternFilters[i].isMatch(qname))
if (syncFilters[i].isMatch(qname))
{
return true;
}

View File

@@ -19,6 +19,7 @@
package org.alfresco.repo.virtual.store;
import java.io.InputStream;
import java.io.Serializable;
import java.util.Arrays;
@@ -100,16 +101,6 @@ public class TypeVirtualizationMethodTest extends TestSuite
assertTrue(typeVirtualizationMethod.canVirtualize(environment,
virtuaChildRef));
try
{
// invalid prefix
typeVirtualizationMethod.setQnameFilters("invalid:site");
fail("Should not be able to se invalib filters.");
}
catch (IllegalArgumentException e)
{
// as expected
}
assertTrue(typeVirtualizationMethod.canVirtualize(environment,
virtuaChildRef));
@@ -274,8 +265,7 @@ public class TypeVirtualizationMethodTest extends TestSuite
final String prefixedType = theType.toPrefixString(environment.getNamespacePrefixResolver());
String contentName = prefixedType;
contentName = contentName.replaceAll(":",
"_")
+ ".json";
"_") + ".json";
InputStream testTemplsteJsonIS = getClass().getResourceAsStream(cp);
ChildAssociationRef templateContentChildRef = createContent(templatesLocation,
@@ -299,17 +289,7 @@ public class TypeVirtualizationMethodTest extends TestSuite
this);
assertIllegalQNameFilters("",
this);
assertIllegalQNameFilters(":",
this);
assertIllegalQNameFilters("vm:",
this);
assertIllegalQNameFilters(":vm",
this);
assertIllegalQNameFilters("vm:fooBar,vm:",
this);
// undefined prefix
assertIllegalQNameFilters("vm:anAspect",
this);
}
public void testQNameFiltersSetter_validFilters() throws Exception
@@ -336,26 +316,26 @@ public class TypeVirtualizationMethodTest extends TestSuite
private static NamespacePrefixResolver mockNamespacePrefixResolver()
{
NamespacePrefixResolver mockNamespacePrefixResolver = Mockito.mock(NamespacePrefixResolver.class,
NamespacePrefixResolver mockNamespacePrefixResolver = Mockito
.mock(NamespacePrefixResolver.class,
new ThrowsException(new NamespaceException("Mock exception ")));
Mockito
.doReturn(Arrays.<String> asList(SiteModel.SITE_MODEL_PREFIX))
Mockito.doReturn(Arrays.<String> asList(SiteModel.SITE_MODEL_PREFIX))
.when(mockNamespacePrefixResolver)
.getPrefixes(SiteModel.SITE_MODEL_URL);
Mockito.doReturn(SiteModel.SITE_MODEL_URL).when(mockNamespacePrefixResolver).getNamespaceURI(
SiteModel.SITE_MODEL_PREFIX);
Mockito.doReturn(SiteModel.SITE_MODEL_URL)
.when(mockNamespacePrefixResolver)
.getNamespaceURI(SiteModel.SITE_MODEL_PREFIX);
Mockito
.doReturn(Arrays.<String> asList(NamespaceService.CONTENT_MODEL_PREFIX))
Mockito.doReturn(Arrays.<String> asList(NamespaceService.CONTENT_MODEL_PREFIX))
.when(mockNamespacePrefixResolver)
.getPrefixes(NamespaceService.CONTENT_MODEL_1_0_URI);
Mockito.doReturn(NamespaceService.CONTENT_MODEL_1_0_URI).when(mockNamespacePrefixResolver).getNamespaceURI(
NamespaceService.CONTENT_MODEL_PREFIX);
Mockito.doReturn(NamespaceService.CONTENT_MODEL_1_0_URI)
.when(mockNamespacePrefixResolver)
.getNamespaceURI(NamespaceService.CONTENT_MODEL_PREFIX);
Mockito
.doReturn("mock(NamespacePrefixResolver)@" + TypeVirtualizationMethod.class.toString())
Mockito.doReturn("mock(NamespacePrefixResolver)@" + TypeVirtualizationMethod.class.toString())
.when(mockNamespacePrefixResolver)
.toString();
return mockNamespacePrefixResolver;