legacy/experimental/java-libburnia/src/java/org/pykix/libburnia/libburn/Message.java

129 lines
3.4 KiB
Java

/*
* Message.java
*
* Copyright (c) 2007 Vreixo Formoso
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* See COPYING file for details.
*/
package org.pykix.libburnia.libburn;
/**
* Message from libburn.
*
* <p>
* Only fatal messages are printed to stderr by default. This class allows you
* to change that behavior.
*
* <p>
* Indeed, you can also select message queuing, which allows you to retrieve
* the messages. TODO
*
* @author Vreixo Formoso
* @since 0.1
*/
public class Message {
/** */
public enum Severity {
NEVER, FATAL, SORRY, WARNING, HINT, NOTE, UPDATE, DEBUG, ALL
}
private int errorCode;
private String msgText;
private int osErrno;
private Severity severity;
/* it's to be called from JNI code */
Message(int errorCode, String msgText, int osErrno, String severity) {
super();
this.errorCode = errorCode;
this.msgText = msgText;
this.osErrno = osErrno;
this.severity = Severity.valueOf(severity);
}
/**
* Get the a unique error code as listed in libburn/libdax_msgs.h
*
* TODO i need to get the errcodes and list it here, maybe as a enum,
* maybe as integer constants!!
*/
public int getErrorCode() {
return errorCode;
}
/**
* Get a text describing the message
*/
public String getMsgText() {
return msgText;
}
/**
* Get the eventual errno related to the message.
*/
public int getOsErrno() {
return osErrno;
}
/**
* Severity related to the message.
*/
public Severity getSeverity() {
return severity;
}
/**
* Control queueing and stderr printing of messages from libburn.
*
* @param queueSeverity
* Gives the minimum limit for messages to be queued.
* Default: {@link Severity#NEVER}. If you queue messages then you
* must consume them by burn_msgs_obtain().
* @param printSeverity
* Does the same for messages to be printed directly
* to stderr. Default: {@link Severity#FATAL}.
* @param printId
* A text prefix to be printed before the message.
* @return
* <code>true</code> for success, <code>false</code> for error.
*/
public static boolean setSeverities(Severity queueSeverity,
Severity printSeverity, String printId) {
return ( burn_msgs_set_severities(queueSeverity.name(),
printSeverity.name(), printId) > 0);
}
/**
* Obtain the oldest pending libburn message from the queue which has at
* least the given minSeverity. This message and any older message of
* lower severity will get discarded from the queue and is then lost
* forever.
*
* @param minSeverity
* The minimum severity that a message must have to be retrieved.
* To call with minSeverity {@link Severity#NEVER} will discard the
* whole queue.
* @return
* The oldest pending message or <code>null</code> if a message
* with given or higher priority wasn't found.
*/
/*
* TODO this implementation forgets the error that C function can throw!!
*/
public static Message obtain(Severity minSeverity) {
return burn_msgs_obtain( minSeverity.name() );
}
private static native int burn_msgs_set_severities(String queueSeverity,
String printSeverity, String printId);
private static native Message burn_msgs_obtain(String minSeverity);
}