Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@ protected <T> List<T> getResultList(final String methodName,
return wrapperHelper.getResultList(methodName, target, targetClass, args);
}

protected <T> Optional<T> wrapOptional(final String methodName,
final Class<T> targetClass, final Object... args) {
return wrapperHelper.wrapOptional(methodName, target, targetClass, args);
}

protected <T> List<T> wrapList(final String methodName,
final Class<T> targetClass, final Object... args) {
return wrapperHelper.wrapList(methodName, target, targetClass, args);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,26 @@ public <T> List<T> getResultList(final String methodName, final Object target,
return invokeListMethod(false, methodName, target, targetClass, args);
}

/**
* Helper method for methods which return an {@link Optional}.
* This method creates a proxy for the Optional.
*
* @param methodName Name of the method to invoke. The return type of that method needs to be an Optional.
* @param target Target object used for the method invocation.
* @param targetClass The target class the Optional should contain after a proxy was created.
* @param args Additional method arguments.
* @param <T> Target type of the Optional.
* @return Possibly-empty Optional containing the proxy element of the given target class.
*/
public <T> Optional<T> wrapOptional(final String methodName, final Object target,
final Class<T> targetClass, final Object[] args) {
return getResultObject(methodName, target, Optional.class, args)
.flatMap(x -> (Optional<?>) x)
.map(wrapper.getContext().getWrapperProxyFactory()::createProxy)
.filter(targetClass::isInstance)
.map(targetClass::cast);
}

/**
* Helper method for methods which return a list.
* This method creates a proxy for every list element.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ protected Object wrapObject(final Object obj, final Method method, final Object[
final Class<?> vec12xClass = (Class<?>) allArguments[0];
final Class<?> vec11xClass = getContext().getClassMapper().map(vec12xClass);
return wrapList("getSpecificationsWithType", vec12xClass, vec11xClass);
} else if ("getSpecificationWithType".equals(method.getName())) {
final Class<?> vec12xClass = (Class<?>) allArguments[0];
final Class<?> vec11xClass = getContext().getClassMapper().map(vec12xClass);
return wrapOptional("getSpecificationWithType", vec12xClass, vec11xClass);
}

return super.wrapObject(obj, method, allArguments);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ protected Object wrapObject(final Object obj, final Method method, final Object[
final Class<?> vec11xClass = (Class<?>) allArguments[0];
final Class<?> vec12xClass = getContext().getClassMapper().map(vec11xClass);
return wrapList("getSpecificationsWithType", vec11xClass, vec12xClass);
} else if ("getSpecificationWithType".equals(method.getName())) {
final Class<?> vec11xClass = (Class<?>) allArguments[0];
final Class<?> vec12xClass = getContext().getClassMapper().map(vec11xClass);
return wrapOptional("getSpecificationWithType", vec11xClass, vec12xClass);
}

return super.wrapObject(obj, method, allArguments);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,12 @@ protected Object wrapObject(final Object obj, final Method method, final Object[
final Class<?> vec20xClass = (Class<?>) allArguments[0];
final Class<?> vec12xClass = getContext().getClassMapper().map(vec20xClass);
return wrapList("getSpecificationsWithType", vec20xClass, vec12xClass);
} else if ("getSpecificationWithType".equals(method.getName())) {
final Class<?> vec20xClass = (Class<?>) allArguments[0];
final Class<?> vec12xClass = getContext().getClassMapper().map(vec20xClass);
return wrapOptional("getSpecificationWithType", vec20xClass, vec12xClass);
}

return super.wrapObject(obj, method, allArguments);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,14 @@ protected Object wrapObject(final Object obj, final Method method, final Object[
} else if ("setNumberOfSheets".equals(methodName)) {
numberOfSheets = (String) allArguments[0];
return null;
} else if ("getSpecificationsWithType".equals(method.getName())) {
final Class<?> vec12xClass = (Class<?>) allArguments[0];
final Class<?> vec20xClass = getContext().getClassMapper().map(vec12xClass);
return wrapList("getSpecificationsWithType", vec12xClass, vec20xClass);
} else if ("getSpecificationWithType".equals(method.getName())) {
final Class<?> vec12xClass = (Class<?>) allArguments[0];
final Class<?> vec20xClass = getContext().getClassMapper().map(vec12xClass);
return wrapOptional("getSpecificationWithType", vec12xClass, vec20xClass);
}

return super.wrapObject(obj, method, allArguments);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@
import com.foursoft.harness.compatibility.vec12to20.TestFiles;
import com.foursoft.harness.compatibility.vec12to20.util.DefaultVecReader;
import com.foursoft.harness.compatibility.vec12to20.wrapper.AbstractBaseWrapperTest;
import com.foursoft.harness.vec.v2x.VecContent;
import com.foursoft.harness.vec.v2x.VecDocumentVersion;
import com.foursoft.harness.vec.common.util.StreamUtils;
import com.foursoft.harness.vec.v2x.*;
import org.junit.jupiter.api.Test;

import java.io.IOException;
Expand Down Expand Up @@ -57,4 +57,29 @@ void invokeTest() throws IOException {
assertThat(vecDocumentVersion.getNumberOfSheets()).isEqualTo(5);
}
}

@Test
void testGetSpecificationWithType() throws IOException {
try (final InputStream inputOriginal = TestFiles.getInputStream(TestFiles.OLD_BEETLE_V12X)) {
final VecContent originalContent = DefaultVecReader.read(inputOriginal, "test");
assertThat(originalContent).isNotNull();

final VecDocumentVersion vecDocumentVersion = originalContent.getDocumentVersions().stream()
.filter(d -> d.getDocumentNumber().equals("3D2_937_499"))
.collect(StreamUtils.findOne());

assertThat(vecDocumentVersion.getSpecifications())
.hasSize(45);

assertThat(vecDocumentVersion.getSpecificationsWithType(VecConnectorHousingSpecification.class))
.hasSize(32);

assertThat(vecDocumentVersion.getSpecificationWithType(VecSignalSpecification.class))
.isPresent();

assertThat(vecDocumentVersion.getSpecificationWithType(VecBatterySpecification.class))
.isEmpty();
}
}

}