private static List<Object> convertTypesToInstances(Type[] parameterTypes, SpecimenContext context) { List<Object> parameters = new ArrayList<Object>(); for (Type parameterType : parameterTypes) { Object parameterInstance = context.resolve(parameterType); if (parameterInstance instanceof NoSpecimen) return null; parameters.add(parameterInstance); } return parameters; }
@Override public Object create(Object request, SpecimenContext context) { if (!request.equals(ReadableDuration.class)) return new NoSpecimen(); return context.resolve(Duration.class); } }
private Object createArrayWithContentsOfType(SpecimenContext context, Class componentType) { List contents = (List)context.resolve(new MultipleRequest(componentType)); Object array = Array.newInstance(componentType, contents.size()); for(int i = 0; i < contents.size(); i++) { Array.set(array, i, contents.get(i)); } return array; }
@Override public Object create(Object request, SpecimenContext context) { if (!request.equals(ReadablePartial.class)) return new NoSpecimen(); return context.resolve(Partial.class); } }
@Override public Object create(Object request, SpecimenContext context) { if (!request.equals(baseClass)) { return new NoSpecimen(); } return context.resolve(this.subClass); } }
@Override public Object create(Object request, SpecimenContext context) { if (!(request.equals(ReadablePeriod.class) || request.equals(ReadWritablePeriod.class))) return new NoSpecimen(); DateTime dateA = (DateTime) context.resolve(DateTime.class); DateTime dateB = (DateTime) context.resolve(DateTime.class); if (dateA.isBefore(dateB)) return new MutablePeriod(dateA, dateB); else return new MutablePeriod(dateB, dateA); } }
@Override public Object create(Object request, SpecimenContext context) { if (!(request.equals(ReadableInstant.class) || request.equals(ReadWritableInstant.class) || request.equals(ReadableDateTime.class) || request.equals(ReadWritableDateTime.class))) { return new NoSpecimen(); } DateTime date = (DateTime) context.resolve(DateTime.class); return new MutableDateTime(date); } }
@Override public Object create(Object request, SpecimenContext context) { if (!(request.equals(ReadableInterval.class) || request.equals(ReadWritableInterval.class))) return new NoSpecimen(); Interval interval = (Interval) context.resolve(Interval.class); return new MutableInterval(interval); } }
@Override public Object create(Object request, SpecimenContext context) { if (!request.equals(Calendar.class)) { return new NoSpecimen(); } Object dateResult = context.resolve(Date.class); if (dateResult instanceof NoSpecimen) { return new NoSpecimen(); } Date date = (Date) dateResult; GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(date); return calendar; } }
private Map createMap(SpecimenContext context, Class mapClass, List<KeyValuePair> resolved) { Map mapInstance = (Map) context.resolve(mapClass); for (KeyValuePair entry : resolved) { mapInstance.put(entry.getKey(), entry.getValue()); } return mapInstance; }
private Object buildArrayList(MultipleRequest multipleRequest, SpecimenContext context) { ArrayList<Object> list = new ArrayList<Object>(); for (int i = 0; i < multipleCount.getCount(); i++) { Object innerRequest = multipleRequest.getInnerRequest(); Object result = context.resolve(innerRequest); if (result instanceof NoSpecimen) { return new NoSpecimen(); } list.add(result); } return list; } }
private void populateSetters(Object request, Object specimen, SpecimenContext specimenContext) { Class specimenClass = specimen.getClass(); Method[] methods = specimenClass.getMethods(); for (Method method : methods) { if (PropertyUtil.isMethodASetterProperty(method, specimenClass)) { MethodRequest methodRequest = getGenericMethodRequest(request, method); Object propertySpecimen = specimenContext.resolve(methodRequest); if (!(propertySpecimen instanceof NoSpecimen)) { trySetProperty(specimen, method, propertySpecimen); } } } }
private void populateFields(Object request, Object specimen, SpecimenContext specimenContext) { Class specimenClass = specimen.getClass(); Field[] fields = specimenClass.getFields(); for (Field field : fields) { if (isSettable(field)) { FieldRequest fieldRequest = getGenericFieldRequest(request, field); Object propertySpecimen = specimenContext.resolve(fieldRequest); if (!(propertySpecimen instanceof NoSpecimen)) { trySetField(specimen, field, propertySpecimen); } } } }
@Override public Object create(Object request, SpecimenContext context) { if (!(request instanceof Field)) { return new NoSpecimen(); } Field field = (Field) request; Type genericType = field.getGenericType(); SpecimenType specimenType = SpecimenType.of(genericType); String fieldName = field.getName(); Object actualRequest = getActualRequest(field, specimenType); return context.resolve(new SeededRequest(fieldName, actualRequest)); }
@Override public Object create(Object request, SpecimenContext context) { if(!(request instanceof SeededRequest)) return new NoSpecimen(); SeededRequest seededRequest = (SeededRequest)request; Object innerRequest = seededRequest.getRequest(); Object specimen = context.resolve(innerRequest); if(specimen instanceof NoSpecimen) return new NoSpecimen(); return specimen; } }
@Override public Object create(Object request, SpecimenContext context) { if (!(request instanceof KeyValueRequest)) { return new NoSpecimen(); } KeyValueRequest kvRequest = (KeyValueRequest)request; Object keyResult = context.resolve(kvRequest.getKeyType()); if(keyResult instanceof NoSpecimen) return new NoSpecimen(); Object valueResult = context.resolve(kvRequest.getValueType()); if(valueResult instanceof NoSpecimen) return new NoSpecimen(); return new KeyValuePair(keyResult, valueResult); } }
@Override public Object create(Object request, SpecimenContext context) { if (!(request instanceof SpecimenType)) { return new NoSpecimen(); } SpecimenType<?> type = (SpecimenType) request; if (!BaseDuration.class.isAssignableFrom(type.getRawType())) { return new NoSpecimen(); } // There's only one implementation of BaseDuration so we're safe to do this Interval interval = (Interval) context.resolve(Interval.class); return interval.toDuration(); } }
@Override public Object create(Object request, SpecimenContext context) { if (!(request instanceof FieldRequest)) { return new NoSpecimen(); } FieldRequest genericTypeRequest = (FieldRequest) request; SpecimenType contextualType = genericTypeRequest.getContainingType(); Field field = genericTypeRequest.getField(); Type parameterType = getMethodReturnType(field, contextualType); String fieldName = field.getName(); SeededRequest seededRequest = new SeededRequest(fieldName, parameterType); return context.resolve(seededRequest); }
@Override public Object create(Object request, SpecimenContext context) { if (!(request instanceof MethodRequest)) { return new NoSpecimen(); } MethodRequest genericTypeRequest = (MethodRequest) request; SpecimenType contextualType = genericTypeRequest.getContainingType(); Method method = genericTypeRequest.getMethod(); Type parameterType = getMethodReturnType(method, contextualType); String propertyName = PropertyUtil.getMemberNameFromMethod(method); SeededRequest seededRequest = new SeededRequest(propertyName, parameterType); return context.resolve(seededRequest); }
private Object getKeyValuePairs(SpecimenContext context, SpecimenType specimenType) { SpecimenType keyType = specimenType.getGenericTypeArguments().get(0).getType(); SpecimenType valueType = specimenType.getGenericTypeArguments().get(1).getType(); MultipleRequest multipleRequest = createMultipleRequest(keyType, valueType); return context.resolve(multipleRequest); }