Skip to content

Commit

Permalink
fix: Some fixes..
Browse files Browse the repository at this point in the history
  • Loading branch information
peacekeeper committed Apr 28, 2021
1 parent bebf529 commit 76a264d
Show file tree
Hide file tree
Showing 8 changed files with 23 additions and 23 deletions.
4 changes: 2 additions & 2 deletions src/main/java/com/danubetech/cborld/Compressor.java
Original file line number Diff line number Diff line change
Expand Up @@ -120,9 +120,9 @@ protected List<TermInfoAndValue> getEntries(Map<String, Object> obj, Map<Integer
}

@Override
public void transformObjectId(Map<String, Object> obj, Map<Integer, Object> transformMap, TermInfo termInfo, String value) {
public void transformObjectId(Map<String, Object> obj, Map<Integer, Object> transformMap, TermInfo termInfo, Object value) {
Integer termId = termInfo != null ? termInfo.termId : null;
CborLdEncoder.EncodedBytes encoded = new UriEncoder(value, this, termInfo).encode();
CborLdEncoder.EncodedBytes encoded = new UriEncoder((String) value, this, termInfo).encode();
transformMap.put(termId, encoded != null ? encoded : value);
}

Expand Down
8 changes: 4 additions & 4 deletions src/main/java/com/danubetech/cborld/Decompressor.java
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ protected TermInfo getTermInfo(Map<String, Object> termMap, Integer key) {
}

@Override
protected void transformObjectId(Map<String, Object> obj, Map<Integer, Object> transformMap, TermInfo termInfo, String value) {
protected void transformObjectId(Map<String, Object> obj, Map<Integer, Object> transformMap, TermInfo termInfo, Object value) {
Object decoded = new UriDecoder(value).decode();
obj.put(termInfo.term, decoded != null ? decoded : value);
}
Expand All @@ -232,8 +232,8 @@ protected void transformObjectType(Map<String, Object> obj, Map<Integer, Object>
List values = Boolean.TRUE.equals(plural) ? (List) value : Collections.singletonList(value);
List entries = new ArrayList<>();
for (Object ivalue : values) {
Object decoded = new VocabTermDecoder(value, this).decode();
entries.add(decoded != null ? decoded : value);
Object decoded = new VocabTermDecoder(ivalue, this).decode();
entries.add(decoded != null ? decoded : ivalue);
}
obj.put(term, Boolean.TRUE.equals(plural) ? entries : entries.get(0));
}
Expand All @@ -244,7 +244,7 @@ protected boolean transformTypedValue(LinkedList entries, String termType, Objec
CborLdDecoder<String> decoder = null;
if (decoderClass != null) {
try {
Constructor<? extends CborLdDecoder<String>> constructor = decoderClass.getConstructor(value.getClass(), Transformer.class, TermInfo.class);
Constructor<? extends CborLdDecoder<String>> constructor = decoderClass.getConstructor(Object.class, Transformer.class, TermInfo.class);
decoder = constructor.newInstance(value, this, termInfo);
} catch (NoSuchMethodException ex) {
return false;
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/com/danubetech/cborld/Transformer.java
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ protected void transform(Map<String, Object> obj, Map<Integer, Object> transform

// transform `@id`
if ("@id".equals(term) || aliases.id.contains(term)) {
this.transformObjectId(obj, transformMap, termInfo, (String) value);
this.transformObjectId(obj, transformMap, termInfo, value);
continue;
}

Expand Down Expand Up @@ -339,7 +339,7 @@ private Map<String, Object> addContext(Map<String, Object> context, String conte

// process context keys in sorted order to ensure term IDs are assigned
// consistently
List<String> keys = ((Map<String, Object>) context).keySet().stream().sorted().collect(Collectors.toCollection(ArrayList::new));
List<String> keys = context.keySet().stream().sorted().collect(Collectors.toCollection(ArrayList::new));
for (String key : keys) {
Object def = ((Map<String, Object>) context).get(key);
if (def == null) {
Expand Down Expand Up @@ -449,7 +449,7 @@ public TermInfo getTermForId(Integer id) {
protected abstract List<TermInfoAndValue> getEntries(Map<String, Object> obj, Map<Integer, Object> transformMap, Transformer
transformer, Map<String, Object> termMap);

protected abstract void transformObjectId(Map<String, Object> obj, Map<Integer, Object> transformMap, TermInfo termInfo, String value);
protected abstract void transformObjectId(Map<String, Object> obj, Map<Integer, Object> transformMap, TermInfo termInfo, Object value);

protected abstract void transformObjectType(Map<String, Object> obj, Map<Integer, Object> transformMap, TermInfo
termInfo, Object value);
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/danubetech/cborld/codecs/UriDecoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public UriDecoder(Object value) {

@Override
public String decode() {
if ((!(this.value instanceof List<?>)) || ((List<?>) this.value).size() > 1) {
if (!(this.value instanceof List<?> && ((List<?>) this.value).size() > 1)) {
return null;
}

Expand All @@ -42,7 +42,7 @@ public String decode() {

private static <T> CborLdDecoder<T> createDecoder(Class<? extends CborLdDecoder<T>> cl, Object value, Transformer transformer, TermInfo termInfo) {
try {
return cl.getConstructor(value.getClass(), Transformer.class, TermInfo.class).newInstance(value, transformer, termInfo);
return cl.getConstructor(Object.class, Transformer.class, TermInfo.class).newInstance(value, transformer, termInfo);
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) {
throw new RuntimeException("Cannot instantiate decoder " + cl.getName() + ": " + ex.getMessage(), ex);
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/danubetech/cborld/codecs/UriEncoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public EncodedBytes encode() {

private static <T> CborLdEncoder<T> createEncoder(Class<? extends CborLdEncoder<T>> cl, T value, Transformer transformer, TermInfo termInfo) {
try {
return cl.getConstructor(value.getClass(), Transformer.class, TermInfo.class).newInstance(value, transformer, termInfo);
return cl.getConstructor(String.class, Transformer.class, TermInfo.class).newInstance(value, transformer, termInfo);
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) {
throw new RuntimeException("Cannot instantiate encoder " + cl.getName() + ": " + ex.getMessage(), ex);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ public XsdDateEncoder(String value, Transformer transformer, TermInfo termInfo)
super(value, transformer, termInfo);
}

private EncodedBytes encodeInternal(long parsed) {
private EncodedBytes encodeInternal(DateTime parsedDateTime) {
long parsed = parsedDateTime.getValue();
long secondsSinceEpoch = (long) Math.floor(((double) parsed) / 1000);
String dateString = new DateTime(parsed * 1000).toStringRfc3339();
String dateString = new DateTime(parsed * 1000, parsedDateTime.getTimeZoneShift()).toStringRfc3339();
String expectedDate = dateString.substring(0, dateString.indexOf('T'));
if (!this.value.equals(expectedDate)) {
// compression would be lossy, do not compress
Expand All @@ -33,7 +34,6 @@ public EncodedBytes encode() {
// no date parsed, cannot compress
return null;
}
long parsed = parsedDateTime.getValue();
return this.encodeInternal(parsed);
return this.encodeInternal(parsedDateTime);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ public String decode() {
}
if (this.value instanceof List &&
((List<Object>) this.value).size() == 2 &&
(((List<Object>) this.value).get(0) instanceof Number) ||
(((List<Object>) this.value).get(1) instanceof Number)) {
((((List<Object>) this.value).get(0) instanceof Number) ||
(((List<Object>) this.value).get(1) instanceof Number))) {
return this.decodeInternal();
}
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,14 @@ public XsdDateTimeEncoder(String value, Transformer transformer, TermInfo termIn
super(value, transformer, termInfo);
}

private EncodedBytes encodeInternal(long parsed) {
private EncodedBytes encodeInternal(DateTime parsedDateTime) {
long parsed = parsedDateTime.getValue();
long secondsSinceEpoch = (long) Math.floor(((double) parsed) / 1000);
CBORObject secondsCBORObject = CBORObject.FromObject(secondsSinceEpoch);
int millisecondIndex = this.value.indexOf('.');
if (millisecondIndex == -1) {
String expectedDate = new DateTime(secondsSinceEpoch * 1000).toStringRfc3339().replace(".000Z", "Z");
if (!this.value.equals(expectedDate)) {
String expectedDate = new DateTime(secondsSinceEpoch * 1000, parsedDateTime.getTimeZoneShift()).toStringRfc3339().replace(".000Z", "Z");
if (!this.value.equals(expectedDate)) {
// compression would be lossy, do not compress
return new EncodedBytes(CBORObject.FromObject(this.value).EncodeToBytes());
}
Expand Down Expand Up @@ -50,7 +51,6 @@ public EncodedBytes encode() {
// no date parsed, cannot compress
return null;
}
long parsed = parsedDateTime.getValue();
return this.encodeInternal(parsed);
return this.encodeInternal(parsedDateTime);
}
}

0 comments on commit 76a264d

Please sign in to comment.