/******************************************************************************* * Copyright (c) 2014 IBM Corporation and others * 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.orion.server.cf.utils; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletResponse; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.orion.server.core.ServerStatus; import org.json.JSONObject; public class MultiServerStatus extends ServerStatus { private List<ServerStatus> statuses; public MultiServerStatus() { super(Status.OK_STATUS, HttpServletResponse.SC_OK); statuses = new ArrayList<ServerStatus>(); } public MultiServerStatus(ServerStatus serverStatus) { super(Status.OK_STATUS, HttpServletResponse.SC_OK); statuses = new ArrayList<ServerStatus>(); add(serverStatus); } public boolean add(MultiServerStatus status) { for (ServerStatus s : status.getStatuses()) if (!add(s)) return false; return true; } public boolean add(ServerStatus status) { return statuses.add(status); } public ServerStatus getLastStatus() { if (statuses.size() < 1) return null; return statuses.get(statuses.size() - 1); } public List<String> getMessages() { List<String> messages = new ArrayList<String>(); for (ServerStatus status : statuses) messages.add(status.getMessage()); return messages; } public List<ServerStatus> getStatuses() { return statuses; } @Override public IStatus[] getChildren() { return (IStatus[]) statuses.toArray(); } @Override public int getCode() { if (!statuses.isEmpty()) return getLastStatus().getCode(); else return super.getCode(); } @Override public Throwable getException() { if (!statuses.isEmpty()) return getLastStatus().getException(); else return super.getException(); } @Override public String getMessage() { if (!statuses.isEmpty()) return getLastStatus().getMessage(); else return super.getMessage(); } @Override public String getPlugin() { if (!statuses.isEmpty()) return getLastStatus().getPlugin(); else return super.getPlugin(); } @Override public int getSeverity() { if (!statuses.isEmpty()) return getLastStatus().getSeverity(); else return super.getSeverity(); } @Override public boolean isMultiStatus() { return false; } @Override public boolean isOK() { if (!statuses.isEmpty()) return getLastStatus().isOK(); else return super.isOK(); } @Override public boolean matches(int severityMask) { if (!statuses.isEmpty()) return getLastStatus().matches(severityMask); else return super.matches(severityMask); } @Override public JSONObject getJsonData() { if (!statuses.isEmpty()) return getLastStatus().getJsonData(); else return super.getJsonData(); } @Override public JSONObject toJSON() { if (!statuses.isEmpty()) return getLastStatus().toJSON(); else return super.toJSON(); } public String toString() { StringBuffer buf = new StringBuffer(); buf.append("Status "); //$NON-NLS-1$ int severity = getSeverity(); if (severity == OK) { buf.append("OK"); //$NON-NLS-1$ } else if (severity == ERROR) { buf.append("ERROR"); //$NON-NLS-1$ } else if (severity == WARNING) { buf.append("WARNING"); //$NON-NLS-1$ } else if (severity == INFO) { buf.append("INFO"); //$NON-NLS-1$ } else if (severity == CANCEL) { buf.append("CANCEL"); //$NON-NLS-1$ } else { buf.append("severity="); //$NON-NLS-1$ buf.append(severity); } buf.append(": "); //$NON-NLS-1$ buf.append(getPlugin()); buf.append(" code="); //$NON-NLS-1$ buf.append(getCode()); buf.append(' '); buf.append(getMessage()); buf.append(' '); buf.append(getException()); buf.append(" children=["); //$NON-NLS-1$ for (int i = 0; i < statuses.size(); i++) { if (i != 0) { buf.append(" "); //$NON-NLS-1$ } buf.append(statuses.get(i).toString()); } buf.append("]"); //$NON-NLS-1$ return buf.toString(); } }