Skip to content

Commit

Permalink
add multiple breakAfter
Browse files Browse the repository at this point in the history
allow multiple breakAfter for each axis in datadef
hasFinished method extracted from DataHelper to BreakAfterHelper
breakAfter values are cached in hashMap to reduce fieldsHelper access
  • Loading branch information
maithilish committed Mar 11, 2018
1 parent 624d7b1 commit 246e689
Show file tree
Hide file tree
Showing 6 changed files with 98 additions and 50 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -339,5 +339,5 @@

<inceptionYear>2017</inceptionYear>
<name>Gotz</name>
<version>0.9.1-beta</version>
<version>0.9.2-beta</version>
</project>
4 changes: 2 additions & 2 deletions src/main/java/org/codetab/gotz/model/Fields.java
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,8 @@ public boolean equals(final Object obj) {
}

/**
* two nodes with same contents returns hash, so nodes converted to xml and
* hash is calculated.
* two nodes with same contents returns different hash, so nodes converted
* to xml and hash is calculated.
*/
@Override
public int hashCode() {
Expand Down
82 changes: 82 additions & 0 deletions src/main/java/org/codetab/gotz/model/helper/BreakAfterHelper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package org.codetab.gotz.model.helper;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.inject.Inject;

import org.codetab.gotz.exception.FieldsException;
import org.codetab.gotz.exception.FieldsNotFoundException;
import org.codetab.gotz.exception.StepRunException;
import org.codetab.gotz.messages.Messages;
import org.codetab.gotz.model.Axis;
import org.codetab.gotz.model.AxisName;
import org.codetab.gotz.model.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class BreakAfterHelper {

/**
* logger.
*/
static final Logger LOGGER = LoggerFactory.getLogger(Data.class);

@Inject
private FieldsHelper fieldsHelper;

private Map<AxisName, List<String>> breakAftersCache;

/**
* private constructor.
*/
@Inject
private BreakAfterHelper() {
breakAftersCache = new HashMap<>();

}

public boolean hasFinished(final Axis axis, final int endIndex)
throws NumberFormatException, FieldsException {
boolean noField = true;
try {
List<String> breakAfters = null;
AxisName axisName = axis.getName();
if (breakAftersCache.containsKey(axisName)) {
breakAfters = breakAftersCache.get(axisName);
} else {
// xpath - not abs path
breakAfters = fieldsHelper.getValues("//xf:breakAfter/@value", //$NON-NLS-1$
false, axis.getFields());
breakAftersCache.put(axisName, breakAfters);
}
noField = false;
String value = axis.getValue();
if (value == null) {
String message = Messages.getString("BaseParser.48"); //$NON-NLS-1$
throw new StepRunException(message);
} else {
for (String breakAfter : breakAfters) {
if (value.equals(breakAfter)) {
return true;
}
}
}
} catch (FieldsNotFoundException e) {
}

if (endIndex >= 0) {
noField = false;
if (axis.getIndex() + 1 > endIndex) {
return true;
}
}

if (noField) {
String message = Messages.getString("BaseParser.49"); //$NON-NLS-1$
throw new FieldsException(message);
}
return false;
}
}
41 changes: 0 additions & 41 deletions src/main/java/org/codetab/gotz/model/helper/DataHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,6 @@
import javax.script.ScriptEngineManager;

import org.codetab.gotz.exception.DataDefNotFoundException;
import org.codetab.gotz.exception.FieldsException;
import org.codetab.gotz.exception.FieldsNotFoundException;
import org.codetab.gotz.exception.StepRunException;
import org.codetab.gotz.messages.Messages;
import org.codetab.gotz.model.Axis;
import org.codetab.gotz.model.AxisName;
import org.codetab.gotz.model.Data;
Expand All @@ -39,9 +35,6 @@ public class DataHelper {
@Inject
private DataDefService dataDefService;

@Inject
private FieldsHelper fieldsHelper;

/**
* private constructor.
*/
Expand Down Expand Up @@ -83,40 +76,6 @@ public Member createMember(final Member member) {
return cMember;
}

public boolean hasFinished(final Axis axis, final int endIndex)
throws NumberFormatException, FieldsException {
boolean noField = true;
try {
// xpath - not abs path
String breakAfter = fieldsHelper
.getLastValue("//xf:breakAfter/@value", axis.getFields()); //$NON-NLS-1$
noField = false;
String value = axis.getValue();
if (value == null) {
String message = Messages.getString("BaseParser.48"); //$NON-NLS-1$
throw new StepRunException(message);
} else {
if (value.equals(breakAfter)) {
return true;
}
}
} catch (FieldsNotFoundException e) {
}

if (endIndex >= 0) {
noField = false;
if (axis.getIndex() + 1 > endIndex) {
return true;
}
}

if (noField) {
String message = Messages.getString("BaseParser.49"); //$NON-NLS-1$
throw new FieldsException(message);
}
return false;
}

public Integer[] nextMemberIndexes(final Member member,
final AxisName axisName) {
Integer[] indexes = getMemberIndexes(member);
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/org/codetab/gotz/step/base/BaseParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.codetab.gotz.model.Fields;
import org.codetab.gotz.model.Labels;
import org.codetab.gotz.model.Member;
import org.codetab.gotz.model.helper.BreakAfterHelper;
import org.codetab.gotz.model.helper.DataDefHelper;
import org.codetab.gotz.model.helper.DataHelper;
import org.codetab.gotz.persistence.DataPersistence;
Expand All @@ -59,6 +60,8 @@ public abstract class BaseParser extends Step {
@Inject
private DataHelper dataHelper;
@Inject
private BreakAfterHelper breakAfterHelper;
@Inject
private DataPersistence dataPersistence;
@Inject
private DataDefHelper dataDefHelper;
Expand Down Expand Up @@ -337,7 +340,7 @@ private void pushNewMember(final Deque<Member> mStack, final Member member)
} catch (FieldsNotFoundException e) {
endIndex = -1;
}
if (!dataHelper.hasFinished(axis, endIndex)) {
if (!breakAfterHelper.hasFinished(axis, endIndex)) {
Integer[] nextMemberIndexes =
dataHelper.nextMemberIndexes(member, axisName);
if (!dataHelper.alreadyProcessed(memberIndexSet,
Expand Down
14 changes: 9 additions & 5 deletions src/test/java/org/codetab/gotz/step/base/BaseParserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import org.codetab.gotz.model.Fields;
import org.codetab.gotz.model.Labels;
import org.codetab.gotz.model.Member;
import org.codetab.gotz.model.helper.BreakAfterHelper;
import org.codetab.gotz.model.helper.DataDefHelper;
import org.codetab.gotz.model.helper.DataHelper;
import org.codetab.gotz.model.helper.DocumentHelper;
Expand Down Expand Up @@ -73,6 +74,8 @@ public class BaseParserTest {
@Mock
private DataHelper dataHelper;
@Mock
private BreakAfterHelper breakAfterHelper;
@Mock
private DataDefHelper dataDefHelper;
@Mock
private StepService stepService;
Expand Down Expand Up @@ -267,7 +270,7 @@ public void testProcessParseNoPushNewMember() throws NumberFormatException,
parser.getLabel())).willReturn(data);
given(fieldsHelper.getRange(eq("//xf:indexRange/@value"),
any(Fields.class))).willReturn(indexRange);
given(dataHelper.hasFinished(any(Axis.class), anyInt()))
given(breakAfterHelper.hasFinished(any(Axis.class), anyInt()))
.willReturn(true);

parser.process();
Expand Down Expand Up @@ -309,13 +312,13 @@ public void testProcessParsePushNewMember() throws NumberFormatException,
doReturn(false).doReturn(true).when(dataHelper)
.alreadyProcessed(any(Set.class), any(Integer[].class));

given(dataHelper.hasFinished(member.getAxis(AxisName.ROW), 1))
given(breakAfterHelper.hasFinished(member.getAxis(AxisName.ROW), 1))
.willReturn(false).willReturn(true);

given(dataHelper.hasFinished(newMember.getAxis(AxisName.COL), 1))
given(breakAfterHelper.hasFinished(newMember.getAxis(AxisName.COL), 1))
.willReturn(true);

given(dataHelper.hasFinished(member.getAxis(AxisName.COL), 1))
given(breakAfterHelper.hasFinished(member.getAxis(AxisName.COL), 1))
.willReturn(false);

parser.process();
Expand Down Expand Up @@ -359,7 +362,8 @@ public void testProcessParsePushNewMemberIndexRangeNotFound()
parser.getLabel())).willReturn(data);
given(fieldsHelper.getRange(eq("//xf:indexRange/@value"),
any(Fields.class))).willThrow(FieldsNotFoundException.class);
given(dataHelper.hasFinished(any(Axis.class), eq(-1))).willReturn(true);
given(breakAfterHelper.hasFinished(any(Axis.class), eq(-1)))
.willReturn(true);

parser.process();

Expand Down

0 comments on commit 246e689

Please sign in to comment.