/**
* Copyright (C) 2001-2017 by RapidMiner and the contributors
*
* Complete list of developers available at our web site:
*
* http://rapidminer.com
*
* This program is free software: you can redistribute it and/or modify it under the terms of the
* GNU Affero 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
* Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License along with this program.
* If not, see http://www.gnu.org/licenses/.
*/
package com.rapidminer.gui.viewer.metadata.actions;
import com.rapidminer.gui.tools.ResourceAction;
import com.rapidminer.gui.viewer.metadata.model.AbstractAttributeStatisticsModel;
import com.rapidminer.gui.viewer.metadata.model.DateTimeAttributeStatisticsModel;
import com.rapidminer.gui.viewer.metadata.model.MetaDataStatisticsModel;
import com.rapidminer.gui.viewer.metadata.model.NominalAttributeStatisticsModel;
import com.rapidminer.gui.viewer.metadata.model.NumericalAttributeStatisticsModel;
import com.rapidminer.tools.Ontology;
import com.rapidminer.tools.Tools;
import java.awt.event.ActionEvent;
import java.util.List;
/**
* The action copies all meta data into the clipboard, separating each column via <code>\t</code> so
* pasting into for example Excel is possible.
*
* @author Marco Boeck
*
*/
public class CopyAllMetaDataToClipboardAction extends ResourceAction {
private static final long serialVersionUID = 6979404131032484600L;
/** the {@link MetaDataStatisticsModel} model from which the meta data should be copied */
MetaDataStatisticsModel model;
/**
* Creates a new {@link CopyAllMetaDataToClipboardAction} instance.
*
* @param model
*/
public CopyAllMetaDataToClipboardAction(MetaDataStatisticsModel model) {
super(true, "meta_data_stats.copy_all_metadata");
this.model = model;
}
@Override
public void actionPerformed(ActionEvent e) {
StringBuilder sb = new StringBuilder();
for (AbstractAttributeStatisticsModel statModel : model.getOrderedAttributeStatisticsModels()) {
// append general stats like name, type, missing values
sb.append(statModel.getAttribute().getName());
appendTab(sb);
String valueTypeString = Ontology.ATTRIBUTE_VALUE_TYPE.mapIndex(statModel.getAttribute().getValueType());
valueTypeString = valueTypeString.replaceAll("_", " ");
valueTypeString = String.valueOf(valueTypeString.charAt(0)).toUpperCase() + valueTypeString.substring(1);
sb.append(valueTypeString);
appendTab(sb);
sb.append(Tools.formatIntegerIfPossible(statModel.getNumberOfMissingValues()));
appendTab(sb);
// if construction is shown, also add it
if (statModel.isShowConstruction()) {
String construction = statModel.getConstruction();
construction = construction == null ? "-" : construction;
sb.append(construction);
appendTab(sb);
}
// append value type specific stuff
if (NumericalAttributeStatisticsModel.class.isAssignableFrom(statModel.getClass())) {
sb.append(((NumericalAttributeStatisticsModel) statModel).getAverage());
appendTab(sb);
sb.append(((NumericalAttributeStatisticsModel) statModel).getDeviation());
appendTab(sb);
sb.append(((NumericalAttributeStatisticsModel) statModel).getMinimum());
appendTab(sb);
sb.append(((NumericalAttributeStatisticsModel) statModel).getMaximum());
} else if (NominalAttributeStatisticsModel.class.isAssignableFrom(statModel.getClass())) {
int count = 0;
List<String> valueStrings = ((NominalAttributeStatisticsModel) statModel).getValueStrings();
for (String valueString : valueStrings) {
sb.append(valueString);
if (count < valueStrings.size() - 1) {
sb.append(", ");
}
count++;
}
} else if (DateTimeAttributeStatisticsModel.class.isAssignableFrom(statModel.getClass())) {
sb.append(((DateTimeAttributeStatisticsModel) statModel).getDuration());
appendTab(sb);
sb.append(((DateTimeAttributeStatisticsModel) statModel).getFrom());
appendTab(sb);
sb.append(((DateTimeAttributeStatisticsModel) statModel).getUntil());
}
// next row for next attribute
sb.append(System.lineSeparator());
}
Tools.copyStringToClipboard(sb.toString());
}
/**
* Appends a tabulator symbol to the given {@link StringBuilder}.
*
* @param sb
*/
private static void appendTab(StringBuilder sb) {
sb.append("\t");
}
}