/*
* Lilith - a log event viewer.
* Copyright (C) 2007-2016 Joern Huxhorn
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.huxhorn.lilith.swing.menu;
import de.huxhorn.lilith.swing.actions.BasicFilterAction;
import de.huxhorn.lilith.swing.actions.FocusLoggerAction;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
class FocusLoggerMenu
extends AbstractLoggingFilterMenu
{
private static final long serialVersionUID = 7734936686237835484L;
FocusLoggerMenu()
{
super("Logger");
setViewContainer(null);
}
protected void updateState()
{
removeAll();
String loggerName = null;
if (loggingEvent != null) {
loggerName = loggingEvent.getLogger();
}
if(loggerName == null)
{
setEnabled(false);
return;
}
boolean added = false;
for (String current : prepareLoggerNames(loggerName))
{
BasicFilterAction filterAction = createAction(current);
filterAction.setViewContainer(viewContainer);
add(filterAction);
added = true;
}
setEnabled(added);
}
protected BasicFilterAction createAction(String loggerName)
{
return new FocusLoggerAction(loggerName);
}
static List<String> prepareLoggerNames(String loggerName)
{
List<String> tokens = new ArrayList<>();
loggerName = loggerName.replace('$', '.'); // better handling of inner classes
StringTokenizer tok = new StringTokenizer(loggerName, ".", false);
while(tok.hasMoreTokens())
{
String current=tok.nextToken();
tokens.add(current);
}
List<String> result=new ArrayList<>(tokens.size());
for(int i=tokens.size();i>0;i--)
{
StringBuilder builder=new StringBuilder();
boolean first=true;
for(int j=0;j<i;j++)
{
if(first)
{
first = false;
}
else
{
builder.append(".");
}
builder.append(tokens.get(j));
}
result.add(builder.toString());
}
return result;
}
}