All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openehealth.ipf.commons.audit.AuditContext Maven / Gradle / Ivy

/*
 * Copyright 2017 the original author or authors.
 *
 *  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 org.openehealth.ipf.commons.audit;

import org.openehealth.ipf.commons.audit.handler.AuditExceptionHandler;
import org.openehealth.ipf.commons.audit.marshal.SerializationStrategy;
import org.openehealth.ipf.commons.audit.marshal.dicom.Current;
import org.openehealth.ipf.commons.audit.model.AuditMessage;
import org.openehealth.ipf.commons.audit.protocol.AuditTransmissionProtocol;
import org.openehealth.ipf.commons.audit.queue.AuditMessageQueue;
import org.openehealth.ipf.commons.audit.types.AuditSource;

import java.net.InetAddress;
import java.util.stream.Stream;

/**
 * AuditContext is the central location where all aspects of serializing and sending out
 * Audit messages are defined. This includes
 * 
    *
  • whether auditing is enabled at all
  • *
  • the transmission protocol (UDP, TLS, ...)
  • *
  • the queue implementation (synchronous, asynchronous, ...
  • *
  • the serialization strategy (e.g. which DICOM audit version shall be used)
  • *
  • global parameters like source ID, enterprise ID
  • *
* * @author Christian Ohr * @since 3.5 */ public interface AuditContext { /** * @return true if auditing is enabled, false otherwise */ boolean isAuditEnabled(); /** * @param auditEnabled enable or disable auditing * @deprecated to be removed from the interface in order to prevent accidental change */ void setAuditEnabled(boolean auditEnabled); /** * @return hostname of the audit repository */ String getAuditRepositoryHostName(); /** * @return address of the audit repository */ InetAddress getAuditRepositoryAddress(); /** * @return port of the audit repository */ int getAuditRepositoryPort(); /** * @return sending application */ String getSendingApplication(); /** * @return the wire protocol to be used */ AuditTransmissionProtocol getAuditTransmissionProtocol(); /** * @return the queue implementation to be used */ AuditMessageQueue getAuditMessageQueue(); /** * @return the SSL socket factory to be used for TLS-based connections */ TlsParameters getTlsParameters(); /** * @return a post-processor for audit messages (defaults to a NO-OP implementation */ default AuditMessagePostProcessor getAuditMessagePostProcessor() { return AuditMessagePostProcessor.noOp(); } /** * @return the serialization strategy (defaults to the latest relevant DICOM version) */ default SerializationStrategy getSerializationStrategy() { return Current.INSTANCE; } /** * Sends out the (potentially post-processed) audit messages as configured in this audit context * * @param messages audit messages to be sent */ default void audit(AuditMessage... messages) { if (isAuditEnabled() && messages != null) { getAuditMessageQueue().audit(this, Stream.of(messages) .map(getAuditMessagePostProcessor()) .toArray(AuditMessage[]::new)); } } default AuditMetadataProvider getAuditMetadataProvider() { return AuditMetadataProvider.getDefault(); } /** * Returns a value that is used when an otherwise mandatory attribute for an audit * record in missing (e.g. a participant object ID). In this case, we can still write an audit * record (e.g. documenting a failed request due to the missing attribute). *

* This can also be set to null at the risk that building the audit record might throw an * exception. * * @return a value that is used when an otherwise mandatory attribute for an audit record in missing */ default String getAuditValueIfMissing() { return "UNKNOWN"; } /** * @return Source ID attribute of the audit event */ String getAuditSourceId(); /** * @return Enterprise site ID attribute of the audit event */ String getAuditEnterpriseSiteId(); /** * @return type of audit source */ AuditSource getAuditSource(); /** * @return exception handler */ AuditExceptionHandler getAuditExceptionHandler(); /** * Determines whether participant object records shall be added to the audit message * that are derived from the response of a request. This specifically applies to * query results. The DICOM audit specification states that this should not be the case, * however, project and legal requirements sometimes mandate that e.g. patient identifiers * being retrieved shall be audited. * * @return true if participant object records shall be added, otherwise false */ boolean isIncludeParticipantsFromResponse(); static AuditContext noAudit() { return DefaultAuditContext.NO_AUDIT; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy