protected static String generateKey(PIPRequest pipRequest) { StringBuilder stringBuilder = new StringBuilder(pipRequest.getCategory().toString()); stringBuilder.append('+'); stringBuilder.append(pipRequest.getAttributeId()); stringBuilder.append('+'); stringBuilder.append(pipRequest.getDataTypeId()); String issuer = pipRequest.getIssuer(); if (issuer != null) { stringBuilder.append('+'); stringBuilder.append(issuer); } return stringBuilder.toString(); }
protected Attribute findAttribute(PIPRequest pipRequest) { Attribute attributeResult = null; Iterator<Attribute> iterAttributes = this.listAttributes.iterator(); while (attributeResult == null && iterAttributes.hasNext()) { Attribute attributeTest = iterAttributes.next(); if (pipRequest.getCategory().equals(attributeTest.getCategory()) && pipRequest.getAttributeId().equals(attributeTest.getAttributeId()) && (pipRequest.getIssuer() == null || pipRequest.getIssuer().equals(attributeTest.getIssuer()))) { attributeResult = attributeTest; } } return attributeResult; }
@Override public PIPResponse getAttributes(PIPRequest pipRequest, PIPFinder pipFinder) throws PIPException { String pipRequestKey = generateKey(pipRequest); PIPResponse pipResponse = this.cache.get(pipRequestKey); if (pipResponse != null) { return pipResponse; } Attribute attributeMatch = this.findAttribute(pipRequest); if (attributeMatch == null) { return StdPIPResponse.PIP_RESPONSE_EMPTY; } /* * Iterate through the values and only return the ones that match the requested data type */ List<AttributeValue<?>> matchingValues = attributeMatch .getValues() .stream() .filter( attributeValue -> pipRequest.getDataTypeId().equals(attributeValue.getDataTypeId())) .collect(Collectors.toList()); if (matchingValues.size() > 0) { Attribute attributeResponse = new StdMutableAttribute( attributeMatch.getCategory(), attributeMatch.getAttributeId(), matchingValues, attributeMatch.getIssuer(), false); pipResponse = new StdPIPResponse(attributeResponse); this.cache.put(pipRequestKey, pipResponse); } return pipResponse; }