/* * Copyright (c) 2010-2013 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.evolveum.midpoint.schema.result; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import javax.xml.bind.JAXBElement; import org.apache.commons.lang.StringUtils; import org.w3c.dom.Element; import com.evolveum.midpoint.xml.ns._public.common.common_3.EntryType; import com.evolveum.midpoint.xml.ns._public.common.common_3.LocalizedMessageType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFactory; import com.evolveum.midpoint.xml.ns._public.common.common_3.OperationResultStatusType; import com.evolveum.midpoint.xml.ns._public.common.common_3.OperationResultType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ParamsType; /** * * @author lazyman * */ public abstract class OperationResultFactory { private static long TOKEN_NUMBER = 0; private static synchronized long getNextToken() { TOKEN_NUMBER++; return TOKEN_NUMBER; } public static OperationResultType createOperationResult(String operation, OperationResultStatusType status, String message, String localizedMessage) { return createOperationResult(operation, status, null, message, null, localizedMessage, null); } public static OperationResultType createOperationResult(String operation, OperationResultStatusType status, String message, String localizedMessage, Object[] localizedArguments) { return createOperationResult(operation, status, null, message, null, localizedMessage, localizedArguments); } public static OperationResultType createOperationResult(String operation, OperationResultStatusType status, String message, String messageCode, String localizedMessage) { return createOperationResult(operation, status, null, message, messageCode, localizedMessage, null); } public static OperationResultType createOperationResult(String operation, OperationResultStatusType status, String message, String messageCode, String localizedMessage, Object[] localizedArguments) { return createOperationResult(operation, status, null, message, messageCode, localizedMessage, localizedArguments); } public static OperationResultType createOperationResult(String operation, OperationResultStatusType status, Map<String, Element> params, String message, String messageCode, String localizedMessage, Object[] localizedArguments) { OperationResultType result = createOperationResult(operation, status, params, message, messageCode); if (StringUtils.isEmpty(localizedMessage)) { return result; } ObjectFactory factory = new ObjectFactory(); LocalizedMessageType localizedMessageType = factory.createLocalizedMessageType(); result.setLocalizedMessage(localizedMessageType); localizedMessageType.setKey(localizedMessage); if (localizedArguments == null || localizedArguments.length == 0) { return result; } for (Object object : localizedArguments) { localizedMessageType.getArgument().add(object); } return result; } public static OperationResultType createOperationResult(String operation, OperationResultStatusType status, Map<String, Element> params, String message, String messageCode) { OperationResultType result = createOperationResult(operation, status, params, message); result.setMessageCode(messageCode); return result; } public static OperationResultType createOperationResult(String operation, OperationResultStatusType status, Map<String, Element> params, String message) { OperationResultType result = createOperationResult(operation, status, params); result.setMessage(message); return result; } public static OperationResultType createOperationResult(String operation, OperationResultStatusType status, Map<String, Element> params) { OperationResultType result = createOperationResult(operation, status); if (params == null || params.isEmpty()) { return result; } ObjectFactory factory = new ObjectFactory(); ParamsType paramsType = factory.createParamsType(); result.setParams(paramsType); EntryType entryType; Set<Entry<String, Element>> set = params.entrySet(); for (Entry<String, Element> entry : set) { entryType = factory.createEntryType(); entryType.setKey(entry.getKey()); entryType.setEntryValue(new JAXBElement(EntryType.F_ENTRY_VALUE, Element.class, entry.getValue())); paramsType.getEntry().add(entryType); } return result; } public static OperationResultType createOperationResult(String operation, OperationResultStatusType status) { if (StringUtils.isEmpty(operation)) { throw new IllegalArgumentException("Operation name not defined."); } if (status == null) { throw new IllegalArgumentException("Operation status not defined."); } ObjectFactory factory = new ObjectFactory(); OperationResultType result = factory.createOperationResultType(); result.setToken(getNextToken()); result.setOperation(operation); result.setStatus(status); return result; } }