@Override @SuppressWarnings("unchecked") public <FROM extends DataContainer, TO, DATA extends ConvertorData> Optional<TO> convert(final FROM source, final DATA data) { Optional<TO> result = Optional.empty(); if (Objects.isNull(source)) { LOG.trace("Cannot extract type from null source"); return result; } final Class<? extends DataContainer> type = source.getImplementedInterface(); if (Objects.isNull(type)) { LOG.warn("Cannot extract type from {}, because getImplementedInterface() returns null", source); return result; } return findConvertor(data.getVersion(), type) .map(convertor -> (TO)convertor.convert(source, data)); }
@Override @SuppressWarnings("unchecked") public <FROM extends DataContainer, TO, DATA extends ConvertorData> Optional<TO> convert(final Collection<FROM> source, final DATA data) { Optional<TO> result = Optional.empty(); if (Objects.isNull(source)) { LOG.trace("Cannot extract type from null source"); return result; } final Optional<FROM> first = source.stream().findFirst(); if (!first.isPresent()) { LOG.trace("Cannot extract type from empty collection"); return result; } final Class<? extends DataContainer> type = first.get().getImplementedInterface(); if (Objects.isNull(type)) { LOG.warn("Cannot extract type from {}, because getImplementedInterface() returns null", source); return result; } return findConvertor(data.getVersion(), type) .map(convertor -> (TO)convertor.convert(source, data)); }
@Override protected CharSequence getNewBeanExpression(Object bean) { if (bean instanceof DataContainer) { DataContainer dataContainerBean = (DataContainer) bean; Optional<Class<?>> optBuilderClass = getOptionalBuilderClassByAppendingBuilderToClassName( dataContainerBean.getImplementedInterface()); if (optBuilderClass.isPresent()) { return super.getNewBeanExpression(dataContainerBean, optBuilderClass.get()); } else { throw new IllegalArgumentException("DataContainer has no *Builder class: " + bean.getClass()); } } else { return super.getNewBeanExpression(bean); } }
@SuppressWarnings("rawtypes") private static final Map<InstanceIdentifier, DataContainer> readData(final DataContainer parent, final InstanceIdentifier parentPath, final PathArgument child) { checkArgument(parent != null, "Object should not be null."); checkArgument(child != null, "Child argument should not be null"); Class<? extends DataContainer> parentClass = parent.getImplementedInterface(); return resolveReadStrategy(parentClass, child.getType()).readUsingPathArgument(parent, child, parentPath); }
/** * @param message * @param statGroup TODO * @return */ private MessageCounters getCounters(final DataContainer message, final STATISTIC_GROUP statGroup) { Class<? extends DataContainer> msgType = message.getImplementedInterface(); ConcurrentMap<Class<? extends DataContainer>, MessageCounters> groupData = getOrCreateGroupData(statGroup); MessageCounters counters = getOrCreateCountersPair(msgType, groupData); return counters; }
/** * Process source and return result based on convertor cases, or empty if no match is found. * * @param source the source * @param data the data * @param convertorExecutor convertor executor * @return the optional */ public Optional<TO> process(final FROM source, final DATA data, final ConvertorExecutor convertorExecutor) { Optional<TO> result = Optional.empty(); final short version = data != null ? data.getVersion() : OFP_VERSION_ALL; if (Objects.isNull(source)) { LOG.trace("Failed to convert null for version {}", version); return result; } final Class<?> clazz = source.getImplementedInterface(); final Optional<ConvertorCase<?, TO, DATA>> caseOptional = Optional .ofNullable(getCasesForVersion(version).get(clazz)); final ConvertorCase<?, TO, DATA> processorCase = caseOptional.orElse(defaultCase); if (Objects.nonNull(processorCase)) { result = processorCase.processRaw(source, data, convertorExecutor); if (processorCase.isErrorOnEmpty() && !result.isPresent()) { LOG.warn("Failed to process {} for version {}", clazz, version); } } else { LOG.trace("Failed to process {} for version {}", clazz, version); } return result; }
requestType = ((DataContainer) input).getImplementedInterface(); } else { requestType = input.getClass();