/* * 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.FocusHttpRequestUriAction; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; class FocusHttpRequestUriMenu extends AbstractAccessFilterMenu { private static final long serialVersionUID = -6901950716124475185L; FocusHttpRequestUriMenu() { super("Request URI"); setViewContainer(null); } protected void updateState() { removeAll(); String uri = null; if (accessEvent != null) { uri = accessEvent.getRequestURI(); } if(uri == null) { setEnabled(false); return; } boolean added = false; for (String current : prepareUris(uri)) { BasicFilterAction filterAction = createAction(current); filterAction.setViewContainer(viewContainer); add(filterAction); added = true; } setEnabled(added); } protected BasicFilterAction createAction(String uri) { return new FocusHttpRequestUriAction(uri); } static List<String> prepareUris(String uri) { List<String> tokens = new ArrayList<>(); StringTokenizer tok = new StringTokenizer(uri, "/", 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(); for(int j=0;j<i;j++) { builder.append('/'); builder.append(tokens.get(j)); } result.add(builder.toString()); } return result; } }