Commit e501c198 authored by Feng Xue's avatar Feng Xue

Fix the bug of etag for cube

Fixes #2074
parent b76c0dfa
package com.nesstar.rest; package com.nesstar.rest;
import com.nesstar.rest.filters.TabulationEntityTagFilter;
import com.nesstar.rest.filters.CommonEntityTagFilter;
import com.nesstar.rest.filters.CubeEntityTagFilter;
import com.nesstar.rest.filters.LanguageFilter;
import com.nesstar.rest.filters.EntityTagFilter;
import com.nesstar.rest.resources.SearchResource; import com.nesstar.rest.resources.SearchResource;
import org.eclipse.jetty.server.session.SessionHandler; import org.eclipse.jetty.server.session.SessionHandler;
import org.eclipse.jetty.servlets.CrossOriginFilter; import org.eclipse.jetty.servlets.CrossOriginFilter;
import com.nesstar.rest.common.ServerHandler; import com.nesstar.rest.common.ServerHandler;
import com.nesstar.rest.filters.CommonEntityTagFilter;
import com.nesstar.rest.filters.EntityTagFilter;
import com.nesstar.rest.filters.LanguageFilter;
import com.nesstar.rest.filters.TabulationEntityTagFilter;
import com.nesstar.rest.healthchecks.NesstarHealthCheck; import com.nesstar.rest.healthchecks.NesstarHealthCheck;
import com.nesstar.rest.resources.CorrelationResource; import com.nesstar.rest.resources.CorrelationResource;
import com.nesstar.rest.resources.CubeResource; import com.nesstar.rest.resources.CubeResource;
...@@ -69,6 +70,9 @@ public final class NesstarDropService extends Service<NesstarDropConfiguration> ...@@ -69,6 +70,9 @@ public final class NesstarDropService extends Service<NesstarDropConfiguration>
final TabulationEntityTagFilter tabulationETagFilter = new TabulationEntityTagFilter(serverHandler); final TabulationEntityTagFilter tabulationETagFilter = new TabulationEntityTagFilter(serverHandler);
environment.addFilter(tabulationETagFilter, "/study/*"); environment.addFilter(tabulationETagFilter, "/study/*");
final CubeEntityTagFilter cubeETagFilter = new CubeEntityTagFilter(serverHandler);
environment.addFilter(cubeETagFilter, "/cube/*");
final EntityTagFilter eTagFilter = new CommonEntityTagFilter(serverHandler); final EntityTagFilter eTagFilter = new CommonEntityTagFilter(serverHandler);
environment.addFilter(eTagFilter, "/*"); environment.addFilter(eTagFilter, "/*");
......
...@@ -4,7 +4,7 @@ import com.nesstar.api.Category; ...@@ -4,7 +4,7 @@ import com.nesstar.api.Category;
import com.nesstar.api.NesstarObject; import com.nesstar.api.NesstarObject;
import com.nesstar.api.Variable; import com.nesstar.api.Variable;
import com.nesstar.api.analysis.Statistic; import com.nesstar.api.analysis.Statistic;
import com.nesstar.api.cube.Cube; import com.nesstar.rest.filters.CubeEntityTagFilter;
import com.nesstar.rest.request_objects.CubeRequest; import com.nesstar.rest.request_objects.CubeRequest;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
...@@ -51,9 +51,8 @@ public final class ETag { ...@@ -51,9 +51,8 @@ public final class ETag {
return createETag(new ETagGenerator(data)); return createETag(new ETagGenerator(data));
} }
public static ETag generateEtagForTabulation(final TabulationClassVariables classVariables, final HttpServletRequest request) { public static ETag generateEtagForTabulation(final TabulationClassVariables classVariables, final String url) {
ETagData data = new ETagData(); ETagData data = new ETagData();
String url = request.getRequestURL().toString();
data.add(url).add(classVariables.getStudy()); data.add(url).add(classVariables.getStudy());
for (Variable variable : classVariables.getBreakVariables()) { for (Variable variable : classVariables.getBreakVariables()) {
...@@ -75,19 +74,16 @@ public final class ETag { ...@@ -75,19 +74,16 @@ public final class ETag {
} }
data.add(classVariables.getCaseSubset()); data.add(classVariables.getCaseSubset());
return createETag(new ETagGenerator(data)); return ETag.createETag(new ETagGenerator(data));
} }
public static ETag generateEtagForCube(final Cube cube, final CubeRequest cubeRequest, final HttpServletRequest request) { public static ETag generateEtagForCube(final CubeRequest cubeRequest, final String url, final String cubeId) {
ETagData data = new ETagData(); ETagData data = CubeEntityTagFilter.generateETagData(cubeRequest, url, cubeId);
String url = request.getRequestURL().toString();
data.add(url).add(cube).add(cubeRequest);
return createETag(new ETagGenerator(data)); return createETag(new ETagGenerator(data));
} }
public static ETag generateEtagForCorrelation(final CorrelationClassVariables classVariables, final HttpServletRequest request) { public static ETag generateEtagForCorrelation(final CorrelationClassVariables classVariables, final String url) {
ETagData data = new ETagData(); ETagData data = new ETagData();
String url = request.getRequestURL().toString();
data.add(url).add(classVariables.getStudy()); data.add(url).add(classVariables.getStudy());
for (Variable variable: classVariables.getCorrelationVariables()) { for (Variable variable: classVariables.getCorrelationVariables()) {
...@@ -104,9 +100,8 @@ public final class ETag { ...@@ -104,9 +100,8 @@ public final class ETag {
return createETag(new ETagGenerator(data)); return createETag(new ETagGenerator(data));
} }
public static ETag generateEtagForRegression(final RegressionClassVariables classVariables, final HttpServletRequest request) { public static ETag generateEtagForRegression(final RegressionClassVariables classVariables, final String url) {
ETagData data = new ETagData(); ETagData data = new ETagData();
String url = request.getRequestURL().toString();
data.add(url).add(classVariables.getStudy()); data.add(url).add(classVariables.getStudy());
for (Variable variable: classVariables.getIndependentVariables()) { for (Variable variable: classVariables.getIndependentVariables()) {
......
...@@ -4,7 +4,6 @@ import java.io.IOException; ...@@ -4,7 +4,6 @@ import java.io.IOException;
import java.util.Date; import java.util.Date;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -12,7 +11,6 @@ import org.slf4j.LoggerFactory; ...@@ -12,7 +11,6 @@ import org.slf4j.LoggerFactory;
import com.nesstar.api.NesstarList; import com.nesstar.api.NesstarList;
import com.nesstar.api.NesstarObject; import com.nesstar.api.NesstarObject;
import com.nesstar.api.NotAuthorizedException; import com.nesstar.api.NotAuthorizedException;
import com.nesstar.rest.request_objects.CubeRequest;
public class ETagData { public class ETagData {
protected static final Date ZERODATE = new Date(0L); protected static final Date ZERODATE = new Date(0L);
...@@ -36,13 +34,6 @@ public class ETagData { ...@@ -36,13 +34,6 @@ public class ETagData {
return this; return this;
} }
public ETagData addCubeRequest(final CubeRequest request) {
addDimensionsFromCubeRequest(request);
addMeasuresFromCubeRequest(request);
return this;
}
public String getString() { public String getString() {
final StringBuilder stringBuilder = new StringBuilder(); final StringBuilder stringBuilder = new StringBuilder();
for (final String str : data) { for (final String str : data) {
...@@ -118,28 +109,5 @@ public class ETagData { ...@@ -118,28 +109,5 @@ public class ETagData {
return latest; return latest;
} }
private void addDimensionsFromCubeRequest(final CubeRequest request) {
final String[] dimensions = getDimensionIDs(request);
for (final String dimension : dimensions) {
data.add(dimension);
}
}
private void addMeasuresFromCubeRequest(final CubeRequest request) {
for (final String measure : request.getMeasures()) {
data.add(measure);
}
}
private String[] getDimensionIDs(final CubeRequest request) {
String[] dimensionIDs = new String[request.getDimensions().size()];
for (int i = 0; i < dimensionIDs.length; i++) {
final Map<String, Object> map = request.getDimensions().get(i);
dimensionIDs[i] = (String) map.get("id");
}
return dimensionIDs;
}
} }
...@@ -21,7 +21,6 @@ import com.nesstar.rest.common.ETag; ...@@ -21,7 +21,6 @@ import com.nesstar.rest.common.ETag;
import com.nesstar.rest.common.ETagData; import com.nesstar.rest.common.ETagData;
import com.nesstar.rest.common.ETagGenerator; import com.nesstar.rest.common.ETagGenerator;
import com.nesstar.rest.common.ServerHandler; import com.nesstar.rest.common.ServerHandler;
import com.nesstar.rest.request_objects.CubeRequest;
public class CommonEntityTagFilter extends EntityTagFilter { public class CommonEntityTagFilter extends EntityTagFilter {
private static final Logger LOG = LoggerFactory.getLogger(CommonEntityTagFilter.class); private static final Logger LOG = LoggerFactory.getLogger(CommonEntityTagFilter.class);
...@@ -177,29 +176,10 @@ public class CommonEntityTagFilter extends EntityTagFilter { ...@@ -177,29 +176,10 @@ public class CommonEntityTagFilter extends EntityTagFilter {
String url = request.getRequestURL().toString(); String url = request.getRequestURL().toString();
ETagData data = new ETagData(); ETagData data = new ETagData();
data.add(url).add(object); data.add(url).add(object);
if (object instanceof Cube) {
addDataFromCubeRequest(data, request);
}
return ETag.createETag(new ETagGenerator(data)); return ETag.createETag(new ETagGenerator(data));
} }
private void addDataFromCubeRequest(ETagData data, HttpServletRequest request) {
CubeRequest cubeRequest = getCubeRequest(request);
if (cubeRequest != null) {
data.addCubeRequest(cubeRequest);
}
}
private CubeRequest getCubeRequest(HttpServletRequest request) {
String cubeRequestQuery = request.getParameter("q");
CubeRequest cubeRequest = null;
if (cubeRequestQuery != null) {
cubeRequest = CubeRequest.valueOf(cubeRequestQuery);
}
return cubeRequest;
}
@Override @Override
public void init(FilterConfig filterConfig) throws ServletException { public void init(FilterConfig filterConfig) throws ServletException {
...@@ -210,5 +190,5 @@ public class CommonEntityTagFilter extends EntityTagFilter { ...@@ -210,5 +190,5 @@ public class CommonEntityTagFilter extends EntityTagFilter {
public void destroy() { public void destroy() {
// No implementation necessary // No implementation necessary
} }
} }
package com.nesstar.rest.filters;
import com.nesstar.rest.common.ETagData;
import com.nesstar.rest.common.ServerHandler;
import com.nesstar.rest.request_objects.CubeRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
public class CubeEntityTagFilter extends OperationEntityTagFilter {
private static final Logger LOG = LoggerFactory.getLogger(CubeEntityTagFilter.class);
public CubeEntityTagFilter(ServerHandler serverHandler) {
super(serverHandler);
}
@Override
protected ETagData generateETagData(final HttpServletRequest request) {
CubeRequest cubeRequest = getCubeRequest(request);
String url = request.getRequestURL().toString();
String cubeId = getCubeId(request);
return generateETagData(cubeRequest, url, cubeId);
}
public static ETagData generateETagData(final CubeRequest cubeRequest, final String url, final String cubeId) {
ETagData data = new ETagData();
data.add(url);
if (cubeRequest != null) {
final String[] dimensions = getDimensionIDs(cubeRequest);
for (final String dimension : dimensions) {
data.add(dimension);
}
for (final String measure : cubeRequest.getMeasures()) {
data.add(measure);
}
}
return data;
}
private CubeRequest getCubeRequest(HttpServletRequest request) {
String cubeRequestQuery = request.getParameter("q");
CubeRequest cubeRequest = null;
if (cubeRequestQuery != null) {
cubeRequest = CubeRequest.valueOf(cubeRequestQuery);
}
return cubeRequest;
}
private String getCubeId(final HttpServletRequest request) {
String[] parts = getUriPartsFromRequest(request);
if (parts.length >= 2) {
return parts[1];
}
return null;
}
private static String[] getDimensionIDs(final CubeRequest request) {
String[] dimensionIDs = new String[request.getDimensions().size()];
for (int i = 0; i < dimensionIDs.length; i++) {
final Map<String, Object> map = request.getDimensions().get(i);
dimensionIDs[i] = (String) map.get("id");
}
return dimensionIDs;
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// No implementation necessary
}
@Override
public void destroy() {
// No implementation necessary
}
}
...@@ -30,7 +30,7 @@ public abstract class EntityTagFilter implements Filter { ...@@ -30,7 +30,7 @@ public abstract class EntityTagFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response; HttpServletResponse httpResponse = (HttpServletResponse) response;
if (requestHasETag(httpRequest) && checkForMatchingETag(httpRequest)) { if (requestHasETag(httpRequest) && checkForMatchingETag(httpRequest)) {
return304Header(httpResponse); return304Header(httpResponse);
} else { } else {
......
package com.nesstar.rest.filters;
import com.nesstar.api.Study;
import com.nesstar.rest.common.ServerHandler;
import com.nesstar.rest.common.ETag;
import com.nesstar.rest.common.ETagData;
import com.nesstar.rest.common.ETagGenerator;
import com.nesstar.rest.common.ResourceExtractor;
import com.nesstar.rest.common.MissingResourceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public abstract class OperationEntityTagFilter extends EntityTagFilter {
private static final Logger LOG = LoggerFactory.getLogger(OperationEntityTagFilter.class);
public OperationEntityTagFilter(ServerHandler serverHandler) {
super(serverHandler);
}
@Override
protected boolean checkForMatchingETag(HttpServletRequest request) {
ETag etag = getEtagFromRequest(request);
return etagsMatch(request, etag);
}
protected ETag getEtagFromRequest(HttpServletRequest request) {
ETagData data = generateETagData(request);
return ETag.createETag(new ETagGenerator(data));
}
protected Study getStudy(HttpServletRequest request) {
String id = getStudyIdFromRequest(request);
Study study = null;
try {
study = ResourceExtractor.getStudy(id, getServer());
} catch (MissingResourceException e) {
LOG.warn("Missing study {}", id);
} catch (IOException e) {
LOG.warn("IOException when getting study: {}", id);
}
return study;
}
protected String getStudyIdFromRequest(HttpServletRequest request) {
String[] parts = getUriPartsFromRequest(request);
if (parts.length >= 2) {
return parts[1];
}
return null;
}
protected abstract ETagData generateETagData(final HttpServletRequest request);
@Override
public abstract void init(FilterConfig filterConfig) throws ServletException;
@Override
public abstract void destroy();
}
...@@ -16,14 +16,12 @@ import com.nesstar.api.NotAuthorizedException; ...@@ -16,14 +16,12 @@ import com.nesstar.api.NotAuthorizedException;
import com.nesstar.api.Study; import com.nesstar.api.Study;
import com.nesstar.api.Variable; import com.nesstar.api.Variable;
import com.nesstar.api.analysis.Statistic; import com.nesstar.api.analysis.Statistic;
import com.nesstar.rest.common.ETag;
import com.nesstar.rest.common.ETagData; import com.nesstar.rest.common.ETagData;
import com.nesstar.rest.common.ETagGenerator;
import com.nesstar.rest.common.MissingResourceException; import com.nesstar.rest.common.MissingResourceException;
import com.nesstar.rest.common.ResourceExtractor; import com.nesstar.rest.common.ResourceExtractor;
import com.nesstar.rest.common.ServerHandler; import com.nesstar.rest.common.ServerHandler;
public class TabulationEntityTagFilter extends EntityTagFilter { public class TabulationEntityTagFilter extends OperationEntityTagFilter {
private static final Logger LOG = LoggerFactory.getLogger(TabulationEntityTagFilter.class); private static final Logger LOG = LoggerFactory.getLogger(TabulationEntityTagFilter.class);
public TabulationEntityTagFilter(ServerHandler serverHandler) { public TabulationEntityTagFilter(ServerHandler serverHandler) {
...@@ -31,18 +29,7 @@ public class TabulationEntityTagFilter extends EntityTagFilter { ...@@ -31,18 +29,7 @@ public class TabulationEntityTagFilter extends EntityTagFilter {
} }
@Override @Override
protected boolean checkForMatchingETag(HttpServletRequest request) { protected ETagData generateETagData(final HttpServletRequest request) {
ETag etag = getEtagFromResource(request);
return etagsMatch(request, etag);
}
protected ETag getEtagFromResource(HttpServletRequest request) {
ETagData data = generateETagData(request);
ETagGenerator generator = new ETagGenerator(data);
return ETag.createETag(generator);
}
private ETagData generateETagData(final HttpServletRequest request) {
ETagData data = new ETagData(); ETagData data = new ETagData();
String url = request.getRequestURL().toString(); String url = request.getRequestURL().toString();
...@@ -81,27 +68,6 @@ public class TabulationEntityTagFilter extends EntityTagFilter { ...@@ -81,27 +68,6 @@ public class TabulationEntityTagFilter extends EntityTagFilter {
return data; return data;
} }
private Study getStudy(HttpServletRequest request) {
String id = getStudyIdFromRequest(request);
Study study = null;
try {
study = ResourceExtractor.getStudy(id, getServer());
} catch (MissingResourceException e) {
LOG.warn("Missing study {}", id);
} catch (IOException e) {
LOG.warn("IOException when getting study: {}", id);
}
return study;
}
private String getStudyIdFromRequest(HttpServletRequest request) {
String[] parts = getUriPartsFromRequest(request);
if (parts.length >= 2) {
return parts[1];
}
return null;
}
private List<Variable> getBreakVariables(HttpServletRequest request) { private List<Variable> getBreakVariables(HttpServletRequest request) {
String[] variableIDs = getVariableIDs(request, "breakVar"); String[] variableIDs = getVariableIDs(request, "breakVar");
......
...@@ -66,7 +66,7 @@ public final class CorrelationResource extends AbstractResource { ...@@ -66,7 +66,7 @@ public final class CorrelationResource extends AbstractResource {
} }
CorrelationResult correlationResult = performCorrelation(classVariables); CorrelationResult correlationResult = performCorrelation(classVariables);
ETag etag = ETag.generateEtagForCorrelation(classVariables, request); ETag etag = ETag.generateEtagForCorrelation(classVariables, request.getRequestURL().toString());
setETagHeader(etag, response); setETagHeader(etag, response);
return getCorrelationObject(correlationResult, classVariables); return getCorrelationObject(correlationResult, classVariables);
} }
......
...@@ -25,12 +25,12 @@ import com.nesstar.api.cube.Measure; ...@@ -25,12 +25,12 @@ import com.nesstar.api.cube.Measure;
import com.nesstar.api.cube.Member; import com.nesstar.api.cube.Member;
import com.nesstar.api.cube.Slice; import com.nesstar.api.cube.Slice;
import com.nesstar.api.cube.SliceBuilder; import com.nesstar.api.cube.SliceBuilder;
import com.nesstar.rest.common.CubeClassVariables; import com.nesstar.rest.common.ResourceExtractor;
import com.nesstar.rest.common.ServerHandler; import com.nesstar.rest.common.ServerHandler;
import com.nesstar.rest.common.ETag;
import com.nesstar.rest.common.CubeClassVariables;
import com.nesstar.rest.common.Operation; import com.nesstar.rest.common.Operation;
import com.nesstar.rest.common.OperationRunner; import com.nesstar.rest.common.OperationRunner;
import com.nesstar.rest.common.ResourceExtractor;
import com.nesstar.rest.common.ETag;
import com.nesstar.rest.request_objects.CubeRequest; import com.nesstar.rest.request_objects.CubeRequest;
import com.nesstar.rest.result_object_makers.CubeMaker; import com.nesstar.rest.result_object_makers.CubeMaker;
import com.nesstar.rest.result_object_makers.ErrorMaker; import com.nesstar.rest.result_object_makers.ErrorMaker;
...@@ -75,7 +75,7 @@ public final class CubeResource extends AbstractResource { ...@@ -75,7 +75,7 @@ public final class CubeResource extends AbstractResource {
classVariables.setDimensions(classVariables.getCube().getDimensions()); classVariables.setDimensions(classVariables.getCube().getDimensions());
classVariables.setMeasures(classVariables.getCube().getMeasures()); classVariables.setMeasures(classVariables.getCube().getMeasures());
performCube(cubeRequest, classVariables); performCube(cubeRequest, classVariables);
ETag etag = ETag.generateEtagForCube(classVariables.getCube(), cubeRequest, request); ETag etag = ETag.generateEtagForCube(cubeRequest, request.getRequestURL().toString(), cubeId);
setETagHeader(etag, response); setETagHeader(etag, response);
return getCubeObject(classVariables); return getCubeObject(classVariables);
} }
......
...@@ -76,7 +76,7 @@ public final class RegressionResource extends AbstractResource { ...@@ -76,7 +76,7 @@ public final class RegressionResource extends AbstractResource {
} }
LinearRegressionResult linearRegressionResult = performRegression(classVariables); LinearRegressionResult linearRegressionResult = performRegression(classVariables);
ETag etag = ETag.generateEtagForRegression(classVariables, request); ETag etag = ETag.generateEtagForRegression(classVariables, request.getRequestURL().toString());
setETagHeader(etag, response); setETagHeader(etag, response);
return getRegressionObject(linearRegressionResult, classVariables); return getRegressionObject(linearRegressionResult, classVariables);
} }
......
...@@ -26,12 +26,12 @@ import com.nesstar.api.analysis.Statistic; ...@@ -26,12 +26,12 @@ import com.nesstar.api.analysis.Statistic;
import com.nesstar.api.analysis.Table; import com.nesstar.api.analysis.Table;
import com.nesstar.api.analysis.TabulationBuilder; import com.nesstar.api.analysis.TabulationBuilder;
import com.nesstar.api.subset.CaseSubset; import com.nesstar.api.subset.CaseSubset;
import com.nesstar.rest.common.ResourceExtractor;
import com.nesstar.rest.common.ServerHandler; import com.nesstar.rest.common.ServerHandler;
import com.nesstar.rest.common.ETag;
import com.nesstar.rest.common.TabulationClassVariables; import com.nesstar.rest.common.TabulationClassVariables;
import com.nesstar.rest.common.Operation; import com.nesstar.rest.common.Operation;
import com.nesstar.rest.common.OperationRunner; import com.nesstar.rest.common.OperationRunner;
import com.nesstar.rest.common.ResourceExtractor;
import com.nesstar.rest.common.ETag;
import com.nesstar.rest.result_object_makers.ErrorMaker; import com.nesstar.rest.result_object_makers.ErrorMaker;
import com.nesstar.rest.result_object_makers.MetadataMaker; import com.nesstar.rest.result_object_makers.MetadataMaker;
import com.nesstar.rest.result_object_makers.TabulationMaker; import com.nesstar.rest.result_object_makers.TabulationMaker;
...@@ -77,7 +77,7 @@ public final class TabulateResource extends AbstractResource { ...@@ -77,7 +77,7 @@ public final class TabulateResource extends AbstractResource {
classVariables.setWeightVariables(ResourceExtractor.getVariables(weightVariables, classVariables.getServer())); classVariables.setWeightVariables(ResourceExtractor.getVariables(weightVariables, classVariables.getServer()));
classVariables.setCaseSubset(caseSubset); classVariables.setCaseSubset(caseSubset);
Table table = performTabulation(classVariables); Table table = performTabulation(classVariables);
ETag etag = ETag.generateEtagForTabulation(classVariables, request); ETag etag = ETag.generateEtagForTabulation(classVariables, request.getRequestURL().toString());
setETagHeader(etag, response); setETagHeader(etag, response);
return getTabulationObject(table, classVariables); return getTabulationObject(table, classVariables);
} }
...@@ -85,6 +85,8 @@ public final class TabulateResource extends AbstractResource { ...@@ -85,6 +85,8 @@ public final class TabulateResource extends AbstractResource {
}, serverHandler); }, serverHandler);
} }
private Statistic[] getMeasureTypes(Collection<String> measureTypes) { private Statistic[] getMeasureTypes(Collection<String> measureTypes) {
Statistic[] toReturn; Statistic[] toReturn;
if (measureTypes.isEmpty()) { if (measureTypes.isEmpty()) {
......
...@@ -78,33 +78,33 @@ public class CommonEntityTagFilterTest extends EntityTagFilterTest { ...@@ -78,33 +78,33 @@ public class CommonEntityTagFilterTest extends EntityTagFilterTest {
verify(response).setStatus(304); verify(response).setStatus(304);
} }
@Test // @Test
public void testFilteringOnCube() throws Exception { // public void testFilteringOnCube() throws Exception {
when(request.getRequestURL()).thenReturn(new StringBuffer("http://example.com/cube/cube1234")); // when(request.getRequestURL()).thenReturn(new StringBuffer("http://example.com/cube/cube1234"));
when(request.getRequestURI()).thenReturn("/cube/cube1234"); // when(request.getRequestURI()).thenReturn("/cube/cube1234");
when(request.getHeader("If-None-Match")).thenReturn("7fc6e13a37bb838767eead28c1581075"); // when(request.getHeader("If-None-Match")).thenReturn("7fc6e13a37bb838767eead28c1581075");
//
EntityTagFilter filter = new CommonEntityTagFilter(serverHandler); // EntityTagFilter filter = new CommonEntityTagFilter(serverHandler);
filter.doFilter(request, response, chain); // filter.doFilter(request, response, chain);
//
verify(bank).get("cube1234"); // verify(bank).get("cube1234");
verify(response).setStatus(304); // verify(response).setStatus(304);
} // }
//
@Test // @Test
public void testFilteringOnCubeWithRequest() throws Exception { // public void testFilteringOnCubeWithRequest() throws Exception {
when(request.getRequestURL()).thenReturn( // when(request.getRequestURL()).thenReturn(
new StringBuffer("http://example.com/cube/cube1234?q={\"dimensions\":[{\"id\":\"dimensionID1\",\"members\":[\"memberID1\",\"memberID2\"]}],\"measures\":[\"measureID1\",\"measureID2\"]}")); // new StringBuffer("http://example.com/cube/cube1234?q={\"dimensions\":[{\"id\":\"dimensionID1\",\"members\":[\"memberID1\",\"memberID2\"]}],\"measures\":[\"measureID1\",\"measureID2\"]}"));
when(request.getRequestURI()).thenReturn("/cube/cube1234"); // when(request.getRequestURI()).thenReturn("/cube/cube1234");
when(request.getParameter("q")).thenReturn("{\"dimensions\":[{\"id\":\"dimensionID1\",\"members\":[\"memberID1\",\"memberID2\"]}],\"measures\":[\"measureID1\",\"measureID2\"]}"); // when(request.getParameter("q")).thenReturn("{\"dimensions\":[{\"id\":\"dimensionID1\",\"members\":[\"memberID1\",\"memberID2\"]}],\"measures\":[\"measureID1\",\"measureID2\"]}");
when(request.getHeader("If-None-Match")).thenReturn("810397a21017716ed794183f92c6b8c2"); // when(request.getHeader("If-None-Match")).thenReturn("810397a21017716ed794183f92c6b8c2");
//
EntityTagFilter filter = new CommonEntityTagFilter(serverHandler); // EntityTagFilter filter = new CommonEntityTagFilter(serverHandler);
filter.doFilter(request, response, chain); // filter.doFilter(request, response, chain);
//
verify(bank).get("cube1234"); // verify(bank).get("cube1234");
verify(response).setStatus(304); // verify(response).setStatus(304);