Skip to content

Commit

Permalink
ReduceToBaseModel: implement mapping of enum ALL OF (claeis/ili2db#439)
Browse files Browse the repository at this point in the history
  • Loading branch information
claeis committed Apr 28, 2022
1 parent d9b3fbc commit 9fe9ecb
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 2 deletions.
1 change: 1 addition & 0 deletions doc/CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ LATEST
- Validator: remove result caching in areAreas(), areAreas2(), areAreas3() (#107)
- TranslateToTranslation: implement mapping of enum ALL OF (ili2db#439)
- TranslateToOrigin: implement mapping of enum ALL OF (ili2db#439)
- ReduceToBaseModel: implement mapping of enum ALL OF (ili2db#439)
- iox2wkb: split self-touching lines of polygon boundaries (ili2db#437)
- ReaderFactory: fix/close a left open ItfReader2
- ItfReader2: use ioxFactory to create objects read back from objPool to keep custom types
Expand Down
66 changes: 64 additions & 2 deletions src/main/java/ch/interlis/iox_j/filter/ReduceToBaseModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import ch.interlis.ili2c.metamodel.CompositionType;
import ch.interlis.ili2c.metamodel.Container;
import ch.interlis.ili2c.metamodel.Element;
import ch.interlis.ili2c.metamodel.EnumTreeValueType;
import ch.interlis.ili2c.metamodel.Enumeration;
import ch.interlis.ili2c.metamodel.EnumerationType;
import ch.interlis.ili2c.metamodel.Model;
Expand Down Expand Up @@ -289,7 +290,7 @@ public IoxEvent filter(IoxEvent event) throws IoxException {
}
private void resetMapping() {
srctag2destElement=new HashMap<String,Object>();
src2destEles=new HashMap<EnumerationType,Map<String,String>>();
src2destEles=new HashMap<Type,Map<String,String>>();
}

private void translateObject(IomObject iomObj) {
Expand Down Expand Up @@ -353,9 +354,13 @@ private void translateAttrValue(IomObject iomObj, AttributeDef srcAttr) {
}
boolean isCompType=srcAttr.getDomain() instanceof CompositionType ? true :false;
boolean isEnumType=srcAttr.getDomainResolvingAliases() instanceof EnumerationType ? true : false;
boolean isEnumAllType=srcAttr.getDomainResolvingAliases() instanceof EnumTreeValueType ? true : false;
EnumerationType srcEnumType=null;
EnumTreeValueType srcEnumAllType=null;
if(isEnumType){
srcEnumType=(EnumerationType)srcAttr.getDomainResolvingAliases();
}else if(isEnumAllType) {
srcEnumAllType=(EnumTreeValueType)srcAttr.getDomainResolvingAliases();
}
AttributeDef destAttr=(AttributeDef)srctag2destElement.get(srcAttr.getScopedName());
String destAttrName=destAttr.getName();
Expand All @@ -377,6 +382,8 @@ private void translateAttrValue(IomObject iomObj, AttributeDef srcAttr) {
if(attrValue instanceof String){
if(isEnumType){
attrValue=translateEnumValue((String)attrValue,srcEnumType,(EnumerationType)destAttr.getDomainResolvingAliases());
}else if(isEnumAllType) {
attrValue=translateEnumAllValue((String)attrValue,srcEnumAllType,(EnumTreeValueType)destAttr.getDomainResolvingAliases());
}
iomObj.setattrvalue(destAttrName, (String)attrValue);
}else{
Expand All @@ -396,9 +403,14 @@ private String translateEnumValue(String attrValue, EnumerationType srcEnumType,
String destValue=src2dest.get(attrValue);
return destValue;
}
private String translateEnumAllValue(String attrValue, EnumTreeValueType srcEnumType,EnumTreeValueType destEnumType) {
Map<String,String> src2dest=getEnumAllMapping(srcEnumType,destEnumType);
String destValue=src2dest.get(attrValue);
return destValue;
}


Map<EnumerationType,Map<String,String>> src2destEles=new HashMap<EnumerationType,Map<String,String>>();
Map<Type,Map<String,String>> src2destEles=new HashMap<Type,Map<String,String>>();
private Topic srcTopic;
private Topic destTopic;
private Map<String, String> getEnumMapping(
Expand All @@ -412,6 +424,17 @@ private Map<String, String> getEnumMapping(
}
return src2dest;
}
private Map<String, String> getEnumAllMapping(
EnumTreeValueType srcEnumType,EnumTreeValueType destEnumType) {
Map<String, String> src2dest = src2destEles.get(srcEnumType);
if (src2dest == null) {
src2dest = new HashMap<String, String>();
buildEnumAllList(src2dest, "", srcEnumType.getConsolidatedEnumeration(), "",
destEnumType.getConsolidatedEnumeration(), null);
src2destEles.put(srcEnumType, src2dest);
}
return src2dest;
}
public static void buildEnumList(java.util.Map<String,String> accu,String srcPrefix1,Enumeration srcEnumer,String destPrefix1,Enumeration destEnumer,String destEeName){
String srcPrefix = "";
String destPrefix = "";
Expand Down Expand Up @@ -452,6 +475,45 @@ public static void buildEnumList(java.util.Map<String,String> accu,String srcPre
}
}
}
public static void buildEnumAllList(java.util.Map<String,String> accu,String srcPrefix1,Enumeration srcEnumer,String destPrefix1,Enumeration destEnumer,String destEeName){
String srcPrefix = "";
String destPrefix = "";
if (srcPrefix1.length() > 0) {
srcPrefix = srcPrefix1 + ".";
}
if (destPrefix1!=null && destPrefix1.length() > 0) {
destPrefix = destPrefix1 + ".";
}
Iterator srcIter = srcEnumer.getElements();
Iterator destIter = null;
if (destEnumer != null) {
destIter = destEnumer.getElements();
}
while (srcIter.hasNext()) {
Enumeration.Element srcEe = (Enumeration.Element) srcIter.next();
Enumeration srcSubEnum = srcEe.getSubEnumeration();
Enumeration destSubEnum = null;
Enumeration.Element destEe = null;
if (destIter != null) {
destEe = (Enumeration.Element) destIter.next();
destSubEnum = destEe.getSubEnumeration();
if (destSubEnum == null) {
destEeName = destPrefix + destEe.getName();
}
}
// add ee to accu
accu.put(srcPrefix + srcEe.getName(), destEeName);
if (srcSubEnum != null) {
if(destSubEnum!=null) {
// ee is not leaf, add its name to prefix and add sub elements to accu
buildEnumList(accu, srcPrefix + srcEe.getName(), srcSubEnum, destPrefix+destEe.getName(), destSubEnum, null);
}else {
// ee is not leaf, add its name to prefix and add sub elements to accu
buildEnumList(accu, srcPrefix + srcEe.getName(), srcSubEnum, null, null, destEeName);
}
}
}
}


@Override
Expand Down

0 comments on commit 9fe9ecb

Please sign in to comment.