diff options
Diffstat (limited to 'id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttributeList.java')
-rw-r--r-- | id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttributeList.java | 88 |
1 files changed, 81 insertions, 7 deletions
diff --git a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttributeList.java b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttributeList.java index 8f60bdc0d..233cdebd0 100644 --- a/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttributeList.java +++ b/id/server/stork2-commons/src/main/java/eu/stork/peps/auth/commons/PersonalAttributeList.java @@ -13,7 +13,6 @@ */ package eu.stork.peps.auth.commons; -import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -34,7 +33,7 @@ import org.apache.log4j.Logger; * @see PersonalAttribute */ @SuppressWarnings("PMD") -public final class PersonalAttributeList extends ConcurrentHashMap<String, PersonalAttribute> implements IPersonalAttributeList, Serializable { +public final class PersonalAttributeList extends ConcurrentHashMap<String, PersonalAttribute> implements IPersonalAttributeList { /** * Logger object. @@ -88,10 +87,17 @@ public final class PersonalAttributeList extends ConcurrentHashMap<String, Perso String attrName = (String) key; if (this.latestAttrAlias.containsKey(key)) { - attrName = attrName + this.latestAttrAlias.get(key); + int index = this.latestAttrAlias.get(key); + if ((index + 1) > this.attrAliasNumber.get(key).size()) { + index = 0; + } + + attrName = this.attrAliasNumber.get(key).get(index); + this.latestAttrAlias.put((String) key, Integer.valueOf(++index)); } else { if (this.attrAliasNumber.containsKey(key)) { - this.latestAttrAlias.put(attrName, this.attrAliasNumber.get(key)); + this.latestAttrAlias.put((String) key, Integer.valueOf(0)); + attrName = this.attrAliasNumber.get(key).get(0); } } return super.get(attrName); @@ -109,6 +115,13 @@ public final class PersonalAttributeList extends ConcurrentHashMap<String, Perso /** * {@inheritDoc} */ + public PersonalAttribute replace(final String key, final PersonalAttribute val) { + return super.put(key, val); + } + + /** + * {@inheritDoc} + */ public PersonalAttribute put(final String key, final PersonalAttribute val) { if (StringUtils.isNotEmpty(key) && val != null) { // Validate if attribute name already exists! @@ -135,10 +148,56 @@ public final class PersonalAttributeList extends ConcurrentHashMap<String, Perso } /** - * {@inheritDoc} + * Escape method for attributes with double comma + * + * @return escaped attribute list + * + */ + private String attrListEncoder(String attrList) { + StringBuilder finalAttr = new StringBuilder(); + String boolAttr = PEPSValues.TRUE.toString(); + String reqRegex = PEPSValues.ATTRIBUTE_TUPLE_SEP.toString() + PEPSValues.TRUE.toString() + PEPSValues.ATTRIBUTE_TUPLE_SEP.toString(); + + String reqRegexSeparator = PEPSValues.ATTRIBUTE_TUPLE_SEP.toString() + PEPSValues.TRUE.toString() + PEPSValues.ATTRIBUTE_TUPLE_SEP.toString() + "|" + PEPSValues.ATTRIBUTE_TUPLE_SEP.toString() + + PEPSValues.FALSE.toString() + PEPSValues.ATTRIBUTE_TUPLE_SEP.toString(); + + for (String s : attrList.split(PEPSValues.ATTRIBUTE_SEP.toString())) { + StringBuilder tempBuilder = new StringBuilder(s); + if (s.split(PEPSValues.ATTRIBUTE_TUPLE_SEP.toString()).length > 4) { + LOG.info("Found attributes with special characters, escaping special characters"); + + if (s.split(reqRegex) == null) { + boolAttr = PEPSValues.FALSE.toString(); + } + + tempBuilder.setLength(0); + tempBuilder.append(AttributeUtil.escape(s.split(reqRegexSeparator)[0])); + tempBuilder.append(PEPSValues.ATTRIBUTE_TUPLE_SEP.toString()); + tempBuilder.append(boolAttr); + tempBuilder.append(PEPSValues.ATTRIBUTE_TUPLE_SEP.toString()); + tempBuilder.append(s.split(reqRegexSeparator)[1]); + + } + + finalAttr.append(tempBuilder.toString()); + finalAttr.append(PEPSValues.ATTRIBUTE_SEP.toString()); + } + return finalAttr.toString(); + } + + /** + * Unescape a string + * + * @see PersonalAttributeList#attrListEncoder + * */ + private String attrListDecoder(String string) { + return AttributeUtil.unescape(string); + } + public void populate(final String attrList) { - final StringTokenizer strToken = new StringTokenizer(attrList, PEPSValues.ATTRIBUTE_SEP.toString()); + + final StringTokenizer strToken = new StringTokenizer(attrListEncoder(attrList), PEPSValues.ATTRIBUTE_SEP.toString()); while (strToken.hasMoreTokens()) { final PersonalAttribute persAttr = new PersonalAttribute(); @@ -163,6 +222,9 @@ public final class PersonalAttributeList extends ConcurrentHashMap<String, Perso } if (tuples.length == AttributeConstants.NUMBER_TUPLES.intValue()) { + tuples[0] = attrListDecoder(tuples[0]); + persAttr.setName(attrListDecoder(persAttr.getName())); + persAttr.setStatus(tuples[AttributeConstants.ATTR_STATUS_INDEX.intValue()]); } this.put(tuples[AttributeConstants.ATTR_NAME_INDEX.intValue()], persAttr); @@ -180,6 +242,7 @@ public final class PersonalAttributeList extends ConcurrentHashMap<String, Perso * @return The copy of this IPersonalAttributeList. */ public Object clone() { + // This implementation may have an bug! try { return (PersonalAttributeList) super.clone(); } catch (CloneNotSupportedException e) { @@ -310,6 +373,17 @@ public final class PersonalAttributeList extends ConcurrentHashMap<String, Perso } /** + * {@inheritDoc} + */ + public IPersonalAttributeList merge(IPersonalAttributeList attrList1) { + + for (PersonalAttribute attr : attrList1) { + this.add(attr); + } + return this; + } + + /** * Returns a IPersonalAttributeList of the mandatory attributes in this map. * * @return an IPersonalAttributeList of the mandatory attributes contained in this map. @@ -318,7 +392,7 @@ public final class PersonalAttributeList extends ConcurrentHashMap<String, Perso LOG.info("get simple attributes"); IPersonalAttributeList attrList = new PersonalAttributeList(); for (PersonalAttribute attr : this) { - if (attr.getComplexValue().isEmpty()) { + if (!attr.getValue().isEmpty()) { attrList.put(attr.getName(), attr); LOG.info("adding simple attribute:" + attr.getName()); } |