/* * Copyright 2008-2017 by Emeric Vernat * * This file is part of Java Melody. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.bull.javamelody; import java.awt.Component; import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.IOException; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultListCellRenderer; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JList; /** * Panel des choix de la période par version. * @author Emeric Vernat */ class DeploymentPeriodPanel extends MelodyPanel { private static final long serialVersionUID = 1L; private final JComboBox<String> versionComboBox = new JComboBox<>(); private Map<String, Range> rangeByWebappVersions; DeploymentPeriodPanel(RemoteCollector remoteCollector, Range selectedRange) throws IOException { super(remoteCollector, new FlowLayout(FlowLayout.CENTER)); addDeploymentPeriodPanel(selectedRange); } Map<String, Range> getWebappVersions() { return rangeByWebappVersions; } void requestFocusInVersionField() { versionComboBox.requestFocus(); } private void addDeploymentPeriodPanel(Range selectedRange) throws IOException { final Map<String, Date> webappVersions = getRemoteCollector().collectWebappVersions(); final Map<String, Range> webappRanges = new LinkedHashMap<>(); Date previousDate = null; String selectedVersion = null; for (final Map.Entry<String, Date> entry : webappVersions.entrySet()) { final String version = entry.getKey(); final Date date = entry.getValue(); final Range range; if (previousDate == null) { range = Range.createCustomRange(date, new Date()); } else { range = Range.createCustomRange(date, previousDate); } previousDate = date; webappRanges.put(version, range); if (selectedRange != null && selectedRange.getValue().equals(range.getValue())) { selectedVersion = version; } } this.rangeByWebappVersions = webappRanges; final List<String> versions = new ArrayList<>(); versions.add(" "); versions.addAll(webappVersions.keySet()); versionComboBox.setModel( new DefaultComboBoxModel<>(versions.toArray(new String[versions.size()]))); versionComboBox.setFont(versionComboBox.getFont().deriveFont(Font.BOLD)); if (selectedVersion != null) { versionComboBox.setSelectedItem(selectedVersion); } versionComboBox.setRenderer(new DefaultListCellRenderer() { private static final long serialVersionUID = 1L; @Override public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { final String version = (String) value; final String label = getVersionLabel(version); return super.getListCellRendererComponent(list, label, index, isSelected, cellHasFocus); } }); versionComboBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { final String version = (String) e.getItem(); actionChangeDeploymentPeriod(version); } } }); add(new JLabel(getString("Version"))); add(versionComboBox); } String getVersionLabel(String version) { final Range range = rangeByWebappVersions.get(version); if (range == null) { return " "; } final DateFormat dateFormat = I18N.createDateFormat(); final String startDateLabel = I18N.getString("startDate") .toLowerCase(I18N.getCurrentLocale()); final String endDateLabel = I18N.getString("endDate"); final String label; if (range.getEndDate().getTime() > System.currentTimeMillis()) { label = version + ' ' + startDateLabel + ' ' + dateFormat.format(range.getStartDate()); } else { label = version + ' ' + startDateLabel + ' ' + dateFormat.format(range.getStartDate()) + ' ' + endDateLabel + ' ' + dateFormat.format(range.getEndDate()); } return label; } private void actionChangePeriod(Range newRange) { MainPanel.getParentMainPanelFromChild(this).changeRange(newRange); } final void actionChangeDeploymentPeriod(String version) { final Range newRange = rangeByWebappVersions.get(version); if (newRange == null) { return; } actionChangePeriod(newRange); setVisible(false); } }