/*
* Copyright (C) 2014-2015 University of Dundee & Open Microscopy Environment.
* All rights reserved.
*
* 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 2 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, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.openmicroscopy.shoola.agents.metadata.util;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Point;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import omero.model.Fileset;
import org.apache.commons.collections.CollectionUtils;
import org.openmicroscopy.shoola.agents.metadata.editor.ImportType;
import org.openmicroscopy.shoola.util.ui.UIUtilities;
import org.openmicroscopy.shoola.util.ui.tdialog.TinyDialog;
import omero.gateway.model.FilesetData;
/**
* A {@link TinyDialog} displaying file paths
*
* @author Dominik Lindner <a
* href="mailto:d.lindner@dundee.ac.uk">d.lindner@dundee.ac.uk</a>
*/
public class FilesetInfoDialog extends TinyDialog {
/** This dialog's default width */
public final static int DEFAULT_WIDTH = 400;
/** This dialog's default height */
public final static int DEFAULT_HEIGHT = 300;
/**
* Creates a new instance
*/
public FilesetInfoDialog() {
super(null, null, TinyDialog.CLOSE_ONLY, "");
}
/**
* Sets the data to display
*
* @param set
* The fileset which paths should be shown
* @param importType
* The import type
*/
public void setData(Set<FilesetData> set, ImportType importType) {
if (set == null)
return;
JPanel content = new JPanel();
content.setLayout(new GridBagLayout());
content.setBackground(UIUtilities.BACKGROUND_COLOR);
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.weightx = 1;
c.weighty = 0;
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.NORTHEAST;
if (CollectionUtils.isEmpty(set)) {
JLabel l = new JLabel("No information available.");
l.setBackground(UIUtilities.BACKGROUND_COLOR);
content.add(l, c);
} else {
int size = 0;
FilesetData fsd = set.iterator().next();
if (Fileset.class.isAssignableFrom(fsd.asIObject().getClass())) {
size = ((Fileset)fsd.asIObject()).sizeOfUsedFiles();
}
String txt = size <= 1 ? "Image file" : "Image files";
JLabel l = new JLabel(size + " " + txt);
l.setBackground(UIUtilities.BACKGROUND_COLOR);
content.add(l, c);
c.gridy++;
JSeparator sep = new JSeparator(JSeparator.HORIZONTAL);
sep.setBackground(UIUtilities.BACKGROUND_COLOR);
content.add(sep, c);
c.gridy++;
String header = (importType == ImportType.HARDLINK || importType == ImportType.SOFTLINK) ? "Imported with <b>--transfer="
+ importType.getSymbol() + "</b> from:"
: "Imported from:";
ExpandableTextPane t1 = new ExpandableTextPane();
t1.setBackground(UIUtilities.BACKGROUND_COLOR);
t1.setText(header + "<br/>" + getOriginPaths(set));
content.add(t1, c);
c.gridy++;
JSeparator sep2 = new JSeparator(JSeparator.HORIZONTAL);
sep2.setBackground(UIUtilities.BACKGROUND_COLOR);
content.add(sep2, c);
c.gridy++;
ExpandableTextPane t2 = new ExpandableTextPane();
t2.setBackground(UIUtilities.BACKGROUND_COLOR);
t2.setText("Path on server:<br/>" + getServerPaths(set));
content.add(t2, c);
}
setCanvas(new JScrollPane(content));
}
/**
* Get the original file paths; html formatted
* @param set The fileset to extract the information from
* @return See above
*/
private String getOriginPaths(Set<FilesetData> set) {
StringBuilder sb = new StringBuilder();
Iterator<FilesetData> i = set.iterator();
FilesetData data;
List<String> paths;
Iterator<String> j;
while (i.hasNext()) {
data = i.next();
paths = data.getUsedFilePaths();
j = paths.iterator();
while (j.hasNext()) {
sb.append(j.next());
sb.append("<br/>");
}
}
return sb.toString();
}
/**
* Get the server paths; html formatted
* @param set The fileset to extract the information from
* @return See above.
*/
private String getServerPaths(Set<FilesetData> set) {
StringBuilder sb = new StringBuilder();
Iterator<FilesetData> i = set.iterator();
FilesetData data;
List<String> paths;
Iterator<String> j;
while (i.hasNext()) {
data = i.next();
paths = data.getAbsolutePaths();
j = paths.iterator();
while (j.hasNext()) {
sb.append(j.next());
sb.append("<br/>");
}
}
return sb.toString();
}
/**
* Shows the dialog in the center of the screen
*/
public void open() {
open(null);
}
/**
* Shows the dialog in a certain location
*
* @param location
* See above
*/
public void open(Point location) {
setResizable(true);
getContentPane().setBackground(UIUtilities.BACKGROUND_COLOUR_EVEN);
pack();
Dimension size = getPreferredSize();
if (size.width > DEFAULT_WIDTH)
size.width = DEFAULT_WIDTH;
if (size.height > DEFAULT_HEIGHT)
size.height = DEFAULT_HEIGHT;
// add some more pixels for the horiz. JScrollbar which
// might be shown at the bottom
size.height += 20;
setSize(size);
if (location != null) {
setLocation(location);
setVisible(true);
} else {
UIUtilities.centerAndShow(this);
}
}
}