/** * Copyright (c) 2011, SOCIETIES Consortium (WATERFORD INSTITUTE OF TECHNOLOGY (TSSG), HERIOT-WATT UNIVERSITY (HWU), SOLUTA.NET * (SN), GERMAN AEROSPACE CENTRE (Deutsches Zentrum fuer Luft- und Raumfahrt e.V.) (DLR), Zavod za varnostne tehnologije * informacijske družbe in elektronsko poslovanje (SETCCE), INSTITUTE OF COMMUNICATION AND COMPUTER SYSTEMS (ICCS), LAKE * COMMUNICATIONS (LAKE), INTEL PERFORMANCE LEARNING SOLUTIONS LTD (INTEL), PORTUGAL TELECOM INOVAÇÃO, SA (PTIN), IBM Corp., * INSTITUT TELECOM (ITSUD), AMITEC DIACHYTI EFYIA PLIROFORIKI KAI EPIKINONIES ETERIA PERIORISMENIS EFTHINIS (AMITEC), TELECOM * ITALIA S.p.a.(TI), TRIALOG (TRIALOG), Stiftelsen SINTEF (SINTEF), NEC EUROPE LTD (NEC)) * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following * conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package org.societies.api.identity.util; import java.util.ArrayList; import java.util.List; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import org.societies.api.identity.IIdentity; import org.societies.api.identity.IIdentityManager; import org.societies.api.identity.InvalidFormatException; import org.societies.api.identity.Requestor; import org.societies.api.identity.RequestorCis; import org.societies.api.identity.RequestorService; import org.societies.api.schema.identity.RequestorBean; import org.societies.api.schema.identity.RequestorCisBean; import org.societies.api.schema.identity.RequestorServiceBean; import org.societies.api.schema.servicelifecycle.model.ServiceResourceIdentifier; import org.societies.api.services.ServiceUtils; /** * Tool class to manage conversion between Java type and Bean XMLschema generated type * @author Olivier Maridat (Trialog) */ public class RequestorUtils { public static RequestorBean create(String requestorId) { RequestorBean requestor = new RequestorBean(); requestor.setRequestorId(requestorId); return requestor; } /** * Create a RequestorCisBean or RequestorServiceBean from two string containing the identifiers * @param requestorId Owner id * @param requestorCisOrServiceId CIS ID or 3P service identifier (stringified). A CIS id begins with "cis". * @return the relevant RequestorCisBean or RequestorServiceBean */ public static RequestorBean create(String requestorId, String requestorCisOrServiceId) { if (requestorCisOrServiceId.startsWith("cis-")) { RequestorCisBean requestor = new RequestorCisBean(); requestor.setRequestorId(requestorId); requestor.setCisRequestorId(requestorCisOrServiceId); return requestor; } else { RequestorServiceBean requestor = new RequestorServiceBean(); requestor.setRequestorId(requestorId); try { requestor.setRequestorServiceId(ServiceUtils.generateServiceResourceIdentifierFromString(requestorCisOrServiceId)); } catch(Exception e) { return null; } return requestor; } } public static RequestorServiceBean create(String requestorId, ServiceResourceIdentifier requestorServiceId) { RequestorServiceBean requestor = new RequestorServiceBean(); requestor.setRequestorId(requestorId); requestor.setRequestorServiceId(requestorServiceId); return requestor; } public static String toXmlString(RequestorBean requestor){ StringBuilder sb = new StringBuilder(); if (null != requestor) { sb.append("<Subject>"); sb.append("\t<Attribute AttributeId=\"urn:oasis:names:tc:xacml:1.0:subject:subject-id\" DataType=\""+IIdentity.class.getName()+"\">\n"); sb.append("\t\t<AttributeValue>"+requestor.getRequestorId()+"</AttributeValue>\n"); sb.append("\t</Attribute>\n"); if (requestor instanceof RequestorCisBean) { sb.append("\t<Attribute AttributeId=\"CisId\" DataType=\""+IIdentity.class.getName()+"\">\n"); sb.append("\t\t<AttributeValue>"+((RequestorCisBean)requestor).getCisRequestorId()+"</AttributeValue>\n"); sb.append("\t</Attribute>\n"); } if (requestor instanceof RequestorServiceBean) { sb.append("\t<Attribute AttributeId=\"serviceId\" DataType=\""+ServiceResourceIdentifier.class.getName()+"\">\n"); sb.append("\t\t<AttributeValue>"+((RequestorServiceBean)requestor).getRequestorServiceId()+"</AttributeValue>\n"); sb.append("\t</Attribute>\n"); } sb.append("</Subject>"); } return sb.toString(); } public static String toString(RequestorBean bean){ StringBuilder builder = new StringBuilder(); if (null != bean) { if (bean instanceof RequestorCisBean){ builder.append("RequestorCisBean ["); builder.append("getRequestorId()="); builder.append(bean.getRequestorId()); builder.append(", getCisRequestorId()="); builder.append(((RequestorCisBean) bean).getCisRequestorId()); } else if (bean instanceof RequestorServiceBean){ builder.append("RequestorServiceBean ["); builder.append("getRequestorId()="); builder.append(bean.getRequestorId()); builder.append(", getRequestorServiceId()="); builder.append(((RequestorServiceBean) bean).getRequestorServiceId()); } else{ builder.append("RequestorBean ["); builder.append("getRequestorId()="); builder.append(bean.getRequestorId()); } } builder.append("]"); return builder.toString(); } public static String toUriString(RequestorBean requestor){ StringBuilder sb = new StringBuilder(); sb.append("requestor://"); if (null != requestor) { sb.append(requestor.getRequestorId()); if (requestor instanceof RequestorCisBean) { sb.append("/"+((RequestorCisBean)requestor).getCisRequestorId()); } if (requestor instanceof RequestorServiceBean) { if (null != ((RequestorServiceBean)requestor).getRequestorServiceId()) { sb.append("/"+((RequestorServiceBean)requestor).getRequestorServiceId().getServiceInstanceIdentifier()); if (null != ((RequestorServiceBean)requestor).getRequestorServiceId().getIdentifier()) { sb.append("/"+((RequestorServiceBean)requestor).getRequestorServiceId().getIdentifier().toString()); } } } } // Return the md5 of this URI return DigestUtils.md5Hex(sb.toString()); } public static boolean equal(RequestorBean o1, Object o2) { // -- Verify reference equality if (o1 == o2) { return true; } if (o2 == null) { return false; } if (o1 == null) { return false; } if (!(o2 instanceof RequestorBean)) { return false; } // -- Verify obj type RequestorBean ro2 = (RequestorBean) o2; if (!StringUtils.equals(o1.getRequestorId(), ro2.getRequestorId())) { return false; } if (o1 instanceof RequestorCisBean) { if (!(o2 instanceof RequestorCisBean)) { return false; } if (!StringUtils.equals(((RequestorCisBean)o1).getCisRequestorId(), ((RequestorCisBean)ro2).getCisRequestorId())) { return false; } } else if (o1 instanceof RequestorServiceBean) { if (!(o2 instanceof RequestorServiceBean)) { return false; } if (!ServiceUtils.compare(((RequestorServiceBean)o1).getRequestorServiceId(), ((RequestorServiceBean)ro2).getRequestorServiceId())) { return false; } } else { if (o2 instanceof RequestorCisBean || o2 instanceof RequestorServiceBean) { return false; } } return true; } /** * Use equal instead */ @Deprecated public static boolean equals(RequestorBean o1, Object o2) { return equal(o1, o2); } public static boolean equal(List<RequestorBean> o1, Object o2) { // -- Verify reference equality if (o1 == o2) { return true; } if (o2 == null) { return false; } if (o1 == null) { return false; } if (o1.getClass() != o2.getClass()) { return false; } // -- Verify obj type List<RequestorBean> ro2 = (List<RequestorBean>) o2; if (o1.size() != ro2.size()) { return false; } boolean result = true; for(RequestorBean o1Entry : o1) { result &= contain(o1Entry, ro2); } return result; } public static boolean contain(RequestorBean needle, List<RequestorBean> haystack) { if (null == haystack || haystack.size() <= 0 || null == needle) { return false; } for(RequestorBean entry : haystack) { if (equal(needle, entry)) { return true; } } return false; } public static Requestor toRequestor(RequestorBean requestorBean, IIdentityManager identityManager) throws InvalidFormatException { if (null == requestorBean) { return null; } IIdentity requestorId = identityManager.fromJid(requestorBean.getRequestorId()); if (requestorBean instanceof RequestorCisBean) { return new RequestorCis(requestorId, identityManager.fromJid(((RequestorCisBean) requestorBean).getCisRequestorId())); } else if (requestorBean instanceof RequestorServiceBean) { RequestorService requestor = new RequestorService(requestorId, ((RequestorServiceBean) requestorBean).getRequestorServiceId()); return requestor; } return new Requestor(requestorId); } public static List<Requestor> toRequestors(List<RequestorBean> requestorBeans, IIdentityManager identityManager) throws InvalidFormatException { if (null == requestorBeans) { return null; } List<Requestor> requestors = new ArrayList<Requestor>(); for(RequestorBean requestorBean : requestorBeans) { requestors.add(RequestorUtils.toRequestor(requestorBean, identityManager)); } return requestors; } public static RequestorBean toRequestorBean(Requestor requestor) { if (null == requestor) { return null; } String requestorId = requestor.getRequestorId().getJid(); if (requestor instanceof RequestorCis) { RequestorCisBean requestorBean = new RequestorCisBean(); requestorBean.setRequestorId(requestorId); requestorBean.setCisRequestorId(((RequestorCis)requestor).getCisRequestorId().getJid()); return requestorBean; } else if (requestor instanceof RequestorService) { RequestorServiceBean requestorBean = new RequestorServiceBean(); requestorBean.setRequestorId(requestorId); requestorBean.setRequestorServiceId(((RequestorService)requestor).getRequestorServiceId()); return requestorBean; } RequestorBean requestorBean = new RequestorBean(); requestorBean.setRequestorId(requestorId); return requestorBean; } public static List<RequestorBean> toRequestorBeans(List<Requestor> requestors) { if (null == requestors) { return null; } List<RequestorBean> requestorBeans = new ArrayList<RequestorBean>(); for(Requestor requestor : requestors) { requestorBeans.add(RequestorUtils.toRequestorBean(requestor)); } return requestorBeans; } }