/** * Checks if a field exists in the form based on the value of another field * * @param form The form to validate * @param subFields A list containing information about the fields to validate {@link SubField} * @param coreManager Utility class for creating missing fields * @return */ public boolean validate( IncomingMessageForm form, List<SubField> subFields, CoreManager coreManager) { boolean valid = true; for (SubField sf : subFields) { if (!form.getIncomingMsgFormParameters().containsKey(sf.getParentField().toLowerCase())) continue; IncomingMessageFormParameter parent = form.getIncomingMsgFormParameters().get(sf.getParentField().toLowerCase()); if (sf.getReplaceOn().equals("*") || parent.getValue().equalsIgnoreCase(sf.getReplaceOn())) { if (!form.getIncomingMsgFormParameters().containsKey(sf.getFieldName().toLowerCase())) { valid = false; IncomingMessageFormParameter param = coreManager.createIncomingMessageFormParameter(); param.setMessageFormParamStatus(IncMessageFormParameterStatus.INVALID); param.setName(sf.getFieldName().toLowerCase()); param.setErrText("missing"); param.setValue(""); param.setErrCode(0); form.getIncomingMsgFormParameters().put(sf.getFieldName().toLowerCase(), param); form.setMessageFormStatus(IncMessageFormStatus.INVALID); form.setLastModified(new Date()); } } } return valid; }
public Object call(Object[] params) throws Exception { if (useDirectMethod) { return method.invoke(object, params); } int size = stack.size(); ArrayList<Object> oParams = new ArrayList<Object>(Arrays.asList(params)); oParams.ensureCapacity(oParams.size() + defaults.size()); for (Integer i : defaults.keySet()) { oParams.add(i, defaults.get(i)); } debug("oParams:" + oParams.toString()); debug("Stack:" + stack); Object lastResult = null; for (int i = 0; i < size; i++) { Object v = stack.get(i); debug("v:" + v.getClass().getCanonicalName()); if (v instanceof Server || v instanceof APIWrapperMethods || (i == 0 && v instanceof Plugin)) { lastResult = v; } else if (v instanceof SubField) { SubField obj = (SubField) v; debug("Requesting field: " + obj.getName()); if (obj.getName().equals("length") && lastResult.getClass().isArray()) { lastResult = Array.getLength(lastResult); } else { java.lang.reflect.Field field; try { field = lastResult.getClass().getField(obj.getName()); } catch (NoSuchFieldException e) { field = lastResult.getClass().getDeclaredField(obj.getName()); } catch (NoClassDefFoundError e) { lastResult = null; return lastResult; } field.setAccessible(true); lastResult = field.get(lastResult); } } else if (v instanceof SubCall) { SubCall obj = (SubCall) v; debug( "Calling method: '" + obj.getName() + "' with signature: '" + obj.requiresArgs() + "' '" + Arrays.asList(sigForIndices(obj.requiresArgs())) + "'."); debug("Last result:" + (lastResult == null ? null : lastResult.toString())); debug( "Invoking method: '" + obj.getName() + "' with args: '" + Arrays.asList(indicies(oParams, obj.requiresArgs())) + "'."); Object[] args = indicies(oParams, obj.requiresArgs()); Class<?>[] sig = sigForIndices(obj.requiresArgs()); for (int x = 0; x < args.length; x++) { Object val = args[x]; if ((val.getClass().equals(Long.class) || val.getClass().equals(Double.class) || val.getClass().equals(String.class) || val.getClass().equals(long.class) || val.getClass().equals(double.class)) && (sig[x].equals(Integer.class) || sig[x].equals(int.class))) { args[x] = Integer.valueOf(val.toString()); val = args[x]; } else if ((val.getClass().equals(Integer.class) || val.getClass().equals(Long.class) || val.getClass().equals(String.class) || val.getClass().equals(long.class) || val.getClass().equals(int.class)) && (sig[x].equals(Double.class) || sig[x].equals(double.class))) { args[x] = Double.valueOf(val.toString()); val = args[x]; } else if ((val.getClass().equals(Integer.class) || val.getClass().equals(Double.class) || val.getClass().equals(String.class) || val.getClass().equals(int.class) || val.getClass().equals(double.class)) && (sig[x].equals(Long.class) || sig[x].equals(long.class))) { args[x] = Long.valueOf(val.toString()); val = args[x]; } else if (val instanceof List) { sig[x] = List.class; } debug("Arg " + x + ": '" + val + "', type: " + val.getClass().getName()); debug("Sig type: " + sig[x].getName()); } if (flags.contains("NO_EXCEPTIONS") || flags.contains("FALSE_ON_EXCEPTION")) { try { java.lang.reflect.Method thisMethod; try { thisMethod = lastResult.getClass().getMethod(obj.getName(), sig); } catch (NoSuchMethodException e) { thisMethod = lastResult.getClass().getDeclaredMethod(obj.getName(), sig); } thisMethod.setAccessible(true); lastResult = thisMethod.invoke(lastResult, args); } catch (Exception e) { if (flags.contains("FALSE_ON_EXCEPTION")) { return false; } return null; } } else { java.lang.reflect.Method thisMethod = null; try { thisMethod = lastResult.getClass().getMethod(obj.getName(), sig); } catch (NoSuchMethodException e) { thisMethod = lastResult.getClass().getDeclaredMethod(obj.getName(), sig); } catch (NullPointerException e) { return null; // Logger.getLogger("Minecraft").severe("this returned null: " // + stack.get(i - 1)); } thisMethod.setAccessible(true); lastResult = thisMethod.invoke(lastResult, args); } debug("New value:" + lastResult); } } return lastResult; }