| /*=============================================================================# |
| # Copyright (c) 2009, 2018 Stephan Wahlbrink and others. |
| # |
| # This program and the accompanying materials are made available under the |
| # terms of the Eclipse Public License 2.0 which is available at |
| # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 |
| # which is available at https://www.apache.org/licenses/LICENSE-2.0. |
| # |
| # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 |
| # |
| # Contributors: |
| # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation |
| #=============================================================================*/ |
| |
| package org.eclipse.statet.rj.servi.webapp; |
| |
| import java.util.concurrent.CopyOnWriteArraySet; |
| import java.util.logging.Level; |
| import java.util.logging.LogRecord; |
| import java.util.logging.Logger; |
| |
| import javax.servlet.ServletContext; |
| import javax.servlet.ServletContextEvent; |
| import javax.servlet.ServletContextListener; |
| |
| import org.eclipse.core.runtime.IStatus; |
| |
| import org.eclipse.statet.jcommons.lang.Disposable; |
| |
| import org.eclipse.statet.ecommons.runtime.core.ECommonsRuntime; |
| |
| |
| public class EAppEnvDummy implements ServletContextListener, ECommonsRuntime.AppEnvironment { |
| |
| |
| private final CopyOnWriteArraySet<Disposable> stopListeners= new CopyOnWriteArraySet<>(); |
| |
| private ServletContext context; |
| |
| private Logger logger; |
| |
| |
| public EAppEnvDummy() { |
| } |
| |
| |
| @Override |
| public void contextInitialized(final ServletContextEvent sce) { |
| this.context= sce.getServletContext(); |
| ECommons.init("org.eclipse.statet.rj.services.eruntime", this); |
| |
| this.logger= Logger.getLogger("org.eclipse.statet.rj.servi.pool"); |
| } |
| |
| @Override |
| public void contextDestroyed(final ServletContextEvent sce) { |
| try { |
| for (final Disposable listener : this.stopListeners) { |
| listener.dispose(); |
| } |
| } |
| finally { |
| this.stopListeners.clear(); |
| this.context= null; |
| } |
| } |
| |
| @Override |
| public void addStoppingListener(final Disposable listener) { |
| this.stopListeners.add(listener); |
| } |
| |
| @Override |
| public void removeStoppingListener(final Disposable listener) { |
| this.stopListeners.remove(listener); |
| } |
| |
| // public void log(final IStatus status) { |
| // final StringBuilder sb= new StringBuilder(); |
| // switch (status.getSeverity()) { |
| // case IStatus.OK: |
| // sb.append("[OK] "); |
| // break; |
| // case IStatus.ERROR: |
| // sb.append("[ERROR] "); |
| // break; |
| // case IStatus.WARNING: |
| // sb.append("[WARNING] "); |
| // break; |
| // case IStatus.INFO: |
| // sb.append("[INFO] "); |
| // break; |
| // case IStatus.CANCEL: |
| // sb.append("[CANCEL] "); |
| // break; |
| // default: |
| // sb.append("[severity="); |
| // sb.append(status.getSeverity()); |
| // sb.append(']'); |
| // break; |
| // } |
| // sb.append(status.getMessage()); |
| // |
| // this.context.log(sb.toString(), status.getException()); |
| // } |
| |
| @Override |
| public void log(final IStatus status) { |
| final Level level; |
| switch (status.getSeverity()) { |
| case IStatus.INFO: |
| level= Level.INFO; |
| break; |
| case IStatus.WARNING: |
| level= Level.WARNING; |
| break; |
| case IStatus.ERROR: |
| level= Level.SEVERE; |
| break; |
| default: |
| level= Level.FINE; |
| } |
| final LogRecord record= new LogRecord(level, status.getMessage()); |
| if (status.getException() != null) { |
| record.setThrown(status.getException()); |
| } |
| |
| // set correct caller |
| try { |
| final StackTraceElement[] stackTrace= new Exception().getStackTrace(); |
| for (int i= 1; i < stackTrace.length; i++) { |
| if (!stackTrace[i].getMethodName().startsWith("log")) { |
| record.setSourceClassName(stackTrace[i].getClassName()); |
| record.setSourceMethodName(stackTrace[i].getMethodName()); |
| break; |
| } |
| } |
| } |
| catch (final Exception ignore) {} |
| |
| this.logger.log(record); |
| } |
| |
| } |