/******************************************************************************* * Copyright (c) 2005-2009, G. Weirich and Elexis * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * G. Weirich - initial implementation * *******************************************************************************/ package ch.rgw.tools; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; /** * Universelles Rückgabe-Objekt. Ein Result beinhaltet die Information, ob ein Fehler erfolgt ist, * ggf. den Schweregrad des Fehlers, ein Rückgabeobjekt (bei Erfolgreicher Ausführung), eine * Fehlerbeschreibung bei Fehler. Ein Result kann mehrere Fehlermeldungen aufnehmen (und so durch * mehrere Funktionen propagiert werden) Wenn ein Result mehr als ein Resultat enthält, so ist das * Gesamtesultat das "schlimmste", also das mit der höchsten severity. Wenn ein Result gar kein * Resultat enthält, so ist es "OK". Eine Methode kann entweder ein neues Result-Objekt erzeugen, * oder ein übergebenes Resultobjekt um eine Meldung erweitern. * * @author Gerry * */ public class Result<T> { static final Logger log = Logger.getLogger("Result"); public enum SEVERITY { OK, WARNING, ERROR, FATAL }; List<msg> list = new ArrayList<msg>(); private SEVERITY severity = SEVERITY.OK; private int code; public SEVERITY getSeverity(){ return severity; } public int getCode(){ return code; } public List<msg> getMessages(){ return list; } /** * Kurze Abfrage, ob alles fehlerfrei war * * @return true wenn ja */ public boolean isOK(){ if (list.size() > 0) { for (msg m : list) { if (m.severity != SEVERITY.OK) { return false; } } } return true; } /** * Den "eigentlichen" Rückgabewert der Methode abholen * * @return */ public T get(){ if(list.size()==0) return null; msg result = list.get(0); if(list.size()>1) { for (msg m : list) { if (m.severity.ordinal() > list.get(0).severity.ordinal()) { result = m; } } } return result.result; } /** * Einen OK - Status abholen * * @param result * @return */ public Result(T result){ add(SEVERITY.OK, 0, "Ok", result, false); //$NON-NLS-1$ // return new Result<Object>(Log.NOTHING,0,"Ok",result,false); } /** * Ein neues Resultat hinzufügen * * @param severity * @param code * @param text * @param result * @param log * @return */ public Result<T> add(SEVERITY severity, int code, String text, T result, boolean log){ list.add(new msg(code, text, severity, result)); if (severity.ordinal() > this.severity.ordinal()) { this.severity = severity; this.code = code; } if (log == true) { } return this; } /** * Ein Result zu einem Result hinzufügen * * @param r * @return */ public Result<T> add(Result<T> r){ list.addAll(r.list); return this; } public Result(){} public Result(SEVERITY sev, List<msg> msgs){ list.addAll(msgs); } public Result(SEVERITY severity, int code, String text, T result, boolean bLog){ add(severity, code, text, result, bLog); } public class msg { int code; String text; SEVERITY severity; T result; msg(int c, String t, SEVERITY s, T r){ code = c; text = t; severity = s; result = r; } public SEVERITY getSeverity(){ return severity; } public int getCode(){ return code; } public String getText(){ return text; } } /** * Return the result as String, cr-separated list of entries */ public String toString(){ StringBuilder sb = new StringBuilder(200); for (msg m : list) { sb.append(m.text).append("\n"); //$NON-NLS-1$ } return sb.toString(); } }