-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'v0.15.x_bugfix' into v0.15.x
- Loading branch information
Showing
16 changed files
with
650 additions
and
106 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
136 changes: 136 additions & 0 deletions
136
...rity.dsl/src/de/gebit/integrity/parameter/conversion/conversions/java/other/MapToMap.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
/******************************************************************************* | ||
* Copyright (c) 2016 Rene Schneider, GEBIT Solutions GmbH and others. | ||
* All rights reserved. This program and the accompanying materials | ||
* are made available under the terms of the Eclipse Public License v1.0 | ||
* which accompanies this distribution, and is available at | ||
* http://www.eclipse.org/legal/epl-v10.html | ||
*******************************************************************************/ | ||
package de.gebit.integrity.parameter.conversion.conversions.java.other; | ||
|
||
import java.util.Map; | ||
import java.util.Map.Entry; | ||
|
||
import de.gebit.integrity.operations.UnexecutableException; | ||
import de.gebit.integrity.parameter.conversion.Conversion; | ||
import de.gebit.integrity.parameter.conversion.ConversionContext; | ||
import de.gebit.integrity.parameter.conversion.ConversionFailedException; | ||
import de.gebit.integrity.utils.ParameterUtil.UnresolvableVariableException; | ||
|
||
/** | ||
* A default Integrity conversion. | ||
* | ||
* | ||
* @author Rene Schneider - initial API and implementation | ||
* | ||
*/ | ||
@SuppressWarnings("rawtypes") | ||
@de.gebit.integrity.parameter.conversion.Conversion.Priority(Integer.MIN_VALUE) | ||
public class MapToMap extends Conversion<Map, Map> { | ||
|
||
@SuppressWarnings("unchecked") | ||
@Override | ||
public Map convert(Map aSource, Class<? extends Map> aTargetType, ConversionContext aConversionContext) | ||
throws ConversionFailedException { | ||
|
||
try { | ||
Map tempTargetInstance = aTargetType.newInstance(); | ||
|
||
Class<?> tempTargetValueType = null; | ||
if (aTargetType.getTypeParameters().length >= 2) { | ||
tempTargetValueType = aTargetType.getTypeParameters()[1].getGenericDeclaration().getComponentType(); | ||
} | ||
|
||
for (Entry<?, ?> tempEntry : ((Map<?, ?>) aSource).entrySet()) { | ||
// // find setter | ||
// Method tempWriteMethod = new PropertyDescriptor(tempEntry.getKey(), aTargetType).getWriteMethod(); | ||
// if (tempWriteMethod == null || tempWriteMethod.getParameterTypes().length != 1) { | ||
// throw new ConversionFailedException(aSource.getClass(), aTargetType, | ||
// "No accessible standards-compliant setter found for '" + tempEntry.getKey() + "'"); | ||
// } | ||
// | ||
// aTargetType.getp | ||
// Class<?> tempTargetType = tempWriteMethod.getParameterTypes()[0]; | ||
// Class<?> tempParameterizedType = null; | ||
// | ||
// // See whether we can find a generic type parameter for the given target class | ||
// Class<?> tempClassInFocus = aTargetType; | ||
// while (tempClassInFocus != null) { | ||
// try { | ||
// Field tempField = tempClassInFocus.getDeclaredField(tempEntry.getKey()); | ||
// Type tempGenericType = tempField.getGenericType(); | ||
// if (tempGenericType instanceof ParameterizedType) { | ||
// Type tempInnerType = ((ParameterizedType) tempGenericType).getActualTypeArguments()[0]; | ||
// if (tempInnerType instanceof WildcardType) { | ||
// if (((WildcardType) tempInnerType).getUpperBounds() == null) { | ||
// tempParameterizedType = null; | ||
// } else { | ||
// Type tempUpperBound = ((WildcardType) tempInnerType).getUpperBounds()[0]; | ||
// if (tempUpperBound instanceof ParameterizedType) { | ||
// tempParameterizedType = (Class<?>) ((ParameterizedType) tempUpperBound) | ||
// .getRawType(); | ||
// } else { | ||
// tempParameterizedType = (Class<?>) tempUpperBound; | ||
// } | ||
// } | ||
// // lower bounds not currently supported! | ||
// | ||
// } else { | ||
// if (tempInnerType instanceof ParameterizedType) { | ||
// tempParameterizedType = (Class<?>) ((ParameterizedType) tempInnerType).getRawType(); | ||
// } else { | ||
// tempParameterizedType = (Class<?>) tempInnerType; | ||
// } | ||
// } | ||
// } | ||
// break; | ||
// } catch (SecurityException exc) { | ||
// // don't care, just continue | ||
// } catch (NoSuchFieldException exc) { | ||
// // don't care, just continue | ||
// } | ||
// tempClassInFocus = tempClassInFocus.getSuperclass(); | ||
// } | ||
|
||
Object tempConvertedValue; | ||
// if (tempEntry.getValue() instanceof Map) { // map itself | ||
// // case for only one element within an array type | ||
// Class<?> tempOriginalClass = tempWriteMethod.getParameterTypes()[0]; | ||
// Class<?> tempClass = tempOriginalClass; | ||
// if (tempOriginalClass.isArray()) { | ||
// tempClass = tempClass.getComponentType(); | ||
// } | ||
// | ||
// tempConvertedValue = convert(((Map) tempEntry.getValue()), tempClass, aConversionContext); | ||
// | ||
// if (tempOriginalClass.isArray()) { | ||
// Object tempCopy = tempConvertedValue; | ||
// tempConvertedValue = Array.newInstance(tempClass, 1); | ||
// Array.set(tempConvertedValue, 0, tempCopy); | ||
// } | ||
// } else { // value | ||
tempConvertedValue = convertValueRecursive(tempTargetValueType, null, tempEntry.getValue(), | ||
aConversionContext); | ||
// } | ||
tempTargetInstance.put(tempEntry.getKey(), tempConvertedValue); | ||
} | ||
return tempTargetInstance; | ||
} catch ( | ||
|
||
InstantiationException exc) { | ||
throw new ConversionFailedException(aSource.getClass(), aTargetType, null, exc); | ||
} catch (IllegalAccessException exc) { | ||
throw new ConversionFailedException(aSource.getClass(), aTargetType, null, exc); | ||
} catch (UnresolvableVariableException exc) { | ||
throw new ConversionFailedException(aSource.getClass(), aTargetType, null, exc); | ||
} catch (ClassNotFoundException exc) { | ||
throw new ConversionFailedException(aSource.getClass(), aTargetType, null, exc); | ||
} catch (UnexecutableException exc) { | ||
throw new ConversionFailedException(aSource.getClass(), aTargetType, null, exc); | ||
} catch (IllegalArgumentException exc) { | ||
throw new ConversionFailedException(aSource.getClass(), aTargetType, null, exc); | ||
} catch (SecurityException exc) { | ||
throw new ConversionFailedException(aSource.getClass(), aTargetType, null, exc); | ||
} | ||
} | ||
|
||
} |
Oops, something went wrong.