/*
 * 
 * Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.
 * 
 * The contents of this file are subject to the Sun Community Source
 * License v3.0/Jini Technology Specific Attachment v 1.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://wwws.sun.com/software/jini/licensing/SCSL3_JiniTSA1.html.
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 * the License for the specific language governing rights and limitations
 * under the License.
 * 
 * The Reference Code is Jini Technology Core Platform code, v2.0. The
 * Developer of the Reference Code is Sun Microsystems, Inc.
 * 
 * Contributor(s): Sun Microsystems, Inc.
 * 
 * The contents of this file comply with the Jini Technology Core
 * Platform Compatibility Kit, v2.0A.
 * 
 * Tester(s): Sun Microsystems, Inc.
 * 
 * Test Platform(s):
 * Java 2 SDK, Standard Edition, Version 1.4.2_03 for Solaris(TM)SPARC/x86
 * Java 2 SDK, Standard Edition, Version 1.4.2_03 for Linux (Intel x86)
 * Java 2 SDK, Standard Edition, Version 1.4.2_03 for Windows (Intel Platform)
 * 
 */
package net.jini.lookup.entry;

import java.io.Serializable;

/**
 * Information pertaining to the severity of a Status object.
 * 
 * @author Sun Microsystems, Inc.
 *
 * @see Status
 */
public class StatusType implements Serializable {
    private static final long serialVersionUID = -8268735508512712203L;

    /** @serial */
    private final int type;

    private StatusType(int t) {
	type = t;
    }

    /**
     * An error has occurred that is preventing a service from
     * operating correctly.
     */
    public static final StatusType ERROR = new StatusType(1);

    /**
     * A problem merits attention, but is not impeding the operation
     * of the service.
     */
    public static final StatusType WARNING = new StatusType(2);

    /**
     * An unusual event is occurring, but the event is not necessarily
     * a problem.
     */
    public static final StatusType NOTICE = new StatusType(3);

    /**
     * A noteworthy event is occurring during the normal operation of
     * a service.
     */
    public static final StatusType NORMAL = new StatusType(4);

    /**
     * Returns a string representation of this object.
     */
    public String toString() {
	if (type == ERROR.type) {
	    return "StatusType.ERROR";
	} else if (type == WARNING.type) {
	    return "StatusType.WARNING";
	} else if (type == NOTICE.type) {
	    return "StatusType.NOTICE";
	} else if (type == NORMAL.type) {
	    return "StatusType.NORMAL";
	} else {
	    return "StatusType." + type; // not possible ...
	}
    }

    /**
     * Canonicalize so that <code>==</code> can be used.
     */
    private Object readResolve() {
	if (type == ERROR.type) {
	    return ERROR;
	} else if (type == WARNING.type) {
	    return WARNING;
	} else if (type == NOTICE.type) {
	    return NOTICE;
	} else if (type == NORMAL.type) {
	    return NORMAL;
	} else {
	    throw new IllegalArgumentException("illegal type");
	}
    }
}
