/******************************************************************************* * Copyright (c) 2012 AGETO Service GmbH 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: * Gunnar Wagenknecht - initial API and implementation *******************************************************************************/ package org.eclipse.gyrex.admin.ui.logback.internal; import java.util.List; import org.eclipse.gyrex.logback.config.model.Appender; import org.eclipse.gyrex.logback.config.model.LogbackConfig; import org.eclipse.gyrex.logback.config.model.Logger; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; public class LogbackConfigContentProvider implements ITreeContentProvider { /** serialVersionUID */ private static final long serialVersionUID = 1L; public static final Object[] NO_CHILDREN = new Object[0]; private AppendersGroup appendersGroup; private LoggersGroup loggersGroup; private DefaultLogger defaultLogger; @Override public void dispose() { // empty } @Override public Object[] getChildren(final Object o) { if (o instanceof LogbackConfig) return new Object[] { appendersGroup, loggersGroup, defaultLogger }; else if (o == appendersGroup) return appendersGroup.getAppenders().values().toArray(); else if (o == loggersGroup) return loggersGroup.getLoggers().values().toArray(); else if (o == defaultLogger) return toAppenderReferences(defaultLogger, defaultLogger.getAppenderReferences()); else if (o instanceof Logger) { final Logger logger = (Logger) o; return toAppenderReferences(logger, logger.getAppenderReferences()); } return NO_CHILDREN; } @Override public Object[] getElements(final Object inputElement) { return getChildren(inputElement); } @Override public Object getParent(final Object element) { if (element instanceof AppenderReference) return ((AppenderReference) element).getParent(); if (element instanceof Logger) return loggersGroup; if (element instanceof Appender) return appendersGroup; if ((element == appendersGroup) || (element == loggersGroup) || (element == defaultLogger)) return defaultLogger.getConfig(); return null; } @Override public boolean hasChildren(final Object element) { return getChildren(element).length > 0; } @Override public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) { if (newInput instanceof LogbackConfig) { final LogbackConfig logbackConfig = (LogbackConfig) newInput; appendersGroup = new AppendersGroup(logbackConfig); loggersGroup = new LoggersGroup(logbackConfig); defaultLogger = new DefaultLogger(logbackConfig); } } private Object[] toAppenderReferences(final Object parent, final List<String> appenderReferences) { final Object[] children = new Object[appenderReferences.size()]; for (int i = 0; i < children.length; i++) { children[i] = new AppenderReference(parent, appenderReferences.get(i)); } return children; } }