/*
* Copyright 2004-2010 Information & Software Engineering Group (188/1)
* Institute of Software Technology and Interactive Systems
* Vienna University of Technology, Austria
*
* 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.ifs.tuwien.ac.at/dm/somtoolbox/license.html
*
* 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 at.tuwien.ifs.somtoolbox.data;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import at.tuwien.ifs.somtoolbox.SOMToolboxException;
import at.tuwien.ifs.somtoolbox.data.distance.InputVectorDistanceMatrix;
import at.tuwien.ifs.somtoolbox.input.DataItemLinkageMap;
import at.tuwien.ifs.somtoolbox.input.InputCorrections;
import at.tuwien.ifs.somtoolbox.input.SOMLibDataWinnerMapping;
import at.tuwien.ifs.somtoolbox.layers.AdaptiveCoordinatesVirtualLayer;
/**
* @author Rudolf Mayer
* @version $Id: SharedSOMVisualisationData.java 3704 2010-07-20 10:42:42Z mayer $
*/
public class SharedSOMVisualisationData {
private HashMap<String, SOMVisualisationData> objects = new HashMap<String, SOMVisualisationData>();
public SOMLibClassInformation getClassInfo() {
return (SOMLibClassInformation) getObject(SOMVisualisationData.CLASS_INFO).getData();
}
public SOMLibDataInformation getDataInfo() {
return (SOMLibDataInformation) getObject(SOMVisualisationData.DATA_INFO).getData();
}
public SOMLibDataWinnerMapping getDataWinnerMapping() {
return (SOMLibDataWinnerMapping) getObject(SOMVisualisationData.DATA_WINNER_MAPPING).getData();
}
public InputData getInputData() {
return (InputData) getObject(SOMVisualisationData.INPUT_VECTOR).getData();
}
public SOMLibTemplateVector getTemplateVector() {
return (SOMLibTemplateVector) getObject(SOMVisualisationData.TEMPLATE_VECTOR).getData();
}
public SOMLibRegressInformation getSOMLibRegressInformation() {
return (SOMLibRegressInformation) getObject(SOMVisualisationData.REGRESS_INFORMATION).getData();
}
public AdaptiveCoordinatesVirtualLayer getAdaptiveCoordinates() {
return (AdaptiveCoordinatesVirtualLayer) getObject(SOMVisualisationData.ADAPTIVE_COORDINATES).getData();
}
@SuppressWarnings("unchecked")
public Map<String, String> getLinkageMap() {
return (Map<String, String>) getObject(SOMVisualisationData.LINKAGE_MAP).getData();
}
public InputCorrections getInputCorrections() {
return (InputCorrections) getObject(SOMVisualisationData.INPUT_CORRECTIONS).getData();
}
public InputVectorDistanceMatrix getInputVectorDistanceMatrix() {
return (InputVectorDistanceMatrix) getObject(SOMVisualisationData.INPUT_VECTOR_DISTANCE_MATRIX).getData();
}
public SharedSOMVisualisationData() {
// add known objects
// other objects need to be added by the visualisation that needs it
objects.put(SOMVisualisationData.CLASS_INFO, new SOMVisualisationData(new String[] { "cls", "clsinf",
"clsinfo", "classinfo", "txt" }, null, SOMLibClassInformation.class, SOMVisualisationData.CLASS_INFO));
objects.put(SOMVisualisationData.REGRESS_INFORMATION, new SOMVisualisationData(
new String[] { "reginf", "txt" }, null, SOMLibRegressInformation.class,
SOMVisualisationData.REGRESS_INFORMATION));
objects.put(SOMVisualisationData.DATA_INFO, new SOMVisualisationData(new String[] { "" }, null,
SOMLibDataInformation.class, SOMVisualisationData.DATA_INFO));
objects.put(SOMVisualisationData.DATA_WINNER_MAPPING, new SOMVisualisationData(new String[] { "dwm" }, null,
SOMLibDataWinnerMapping.class, SOMVisualisationData.DATA_WINNER_MAPPING));
objects.put(SOMVisualisationData.INPUT_VECTOR, new SOMVisualisationData(new String[] { "", "tfxidf" }, null,
SOMLibSparseInputData.class, SOMVisualisationData.INPUT_VECTOR));
objects.put(SOMVisualisationData.TEMPLATE_VECTOR, new SOMVisualisationData(new String[] { "tv" }, null,
SOMLibTemplateVector.class, SOMVisualisationData.TEMPLATE_VECTOR));
objects.put(SOMVisualisationData.LINKAGE_MAP, new SOMVisualisationData(new String[] { "linkage" }, null,
DataItemLinkageMap.class, SOMVisualisationData.LINKAGE_MAP));
objects.put(SOMVisualisationData.INPUT_CORRECTIONS, new SOMVisualisationData(new String[] { "correction" },
null, InputCorrections.class, SOMVisualisationData.INPUT_CORRECTIONS));
objects.put(SOMVisualisationData.INPUT_VECTOR_DISTANCE_MATRIX, new SOMVisualisationData(new String[] { "dist",
"dist.bin" }, null, InputVectorDistanceMatrix.class, SOMVisualisationData.INPUT_VECTOR_DISTANCE_MATRIX));
objects.put(SOMVisualisationData.ADAPTIVE_COORDINATES, new SOMVisualisationData(
new String[] { AdaptiveCoordinatesVirtualLayer.FILE_EXTENSION }, null,
AdaptiveCoordinatesVirtualLayer.class, SOMVisualisationData.ADAPTIVE_COORDINATES));
}
public SharedSOMVisualisationData(String classInformationFileName, String regressionInformationFileName,
String dataInformationFileName, String dataWinnerMappingFileName, String inputVectorFileName,
String templateVectorFileName, String linkageMapFileName) {
this();
setFileName(SOMVisualisationData.CLASS_INFO, classInformationFileName);
setFileName(SOMVisualisationData.REGRESS_INFORMATION, regressionInformationFileName);
setFileName(SOMVisualisationData.DATA_INFO, dataInformationFileName);
setFileName(SOMVisualisationData.DATA_WINNER_MAPPING, dataWinnerMappingFileName);
setFileName(SOMVisualisationData.INPUT_VECTOR, inputVectorFileName);
setFileName(SOMVisualisationData.TEMPLATE_VECTOR, templateVectorFileName);
setFileName(SOMVisualisationData.LINKAGE_MAP, linkageMapFileName);
}
public SharedSOMVisualisationData(String classInformationFileName, String dataWinnerMappingFileName,
String inputVectorFileName, String templateVectorFileName) {
this(classInformationFileName, null, null, dataWinnerMappingFileName, inputVectorFileName,
templateVectorFileName, null);
}
public SOMVisualisationData getObject(String name) {
return objects.get(name);
}
public Object getData(String name) {
return objects.get(name).getData();
}
/**
* reads all available input files
*/
public void readAvailableData() {
for (SOMVisualisationData data : objects.values()) {
if (data.getData() == null && data.getFileName() != null && !data.getFileName().equals("")) { // we got no
// data, but
// got a file
// name
try {
data.readFromFile(data.getFileName());
// FIXME this is a bad hack, but needed until #78
// (https://olymp.ifs.tuwien.ac.at/trac/somtoolbox/ticket/78) is implemented
if (data.getType().equals(SOMVisualisationData.TEMPLATE_VECTOR)) {
if (getInputData() != null) {
getInputData().setTemplateVector((TemplateVector) data.getData());
}
}
} catch (SOMToolboxException e) {
e.printStackTrace();
}
}
}
}
public void setData(String name, Object data) {
objects.get(name).setData(data);
}
public void setFileName(String name, String fileName) {
objects.get(name).setFileName(fileName);
}
public void setData(String name, Object data, String fileName) {
setData(name, data);
setFileName(name, fileName);
}
public void setInputCorrections(String fileName) {
setFileName(SOMVisualisationData.INPUT_CORRECTIONS, fileName);
}
public int size() {
return objects.size();
}
public Iterator<String> iterator() {
return objects.keySet().iterator();
}
public SOMVisualisationData[] getObjects() {
return objects.values().toArray(new SOMVisualisationData[size()]);
}
/** Compute the hash code as a sum of the codes of the data in the values of the {@link #objects} */
public int dataHashCode() {
int code = 0;
for (SOMVisualisationData data : objects.values()) {
if (data.getData() != null) {
code += data.getData().hashCode();
}
}
return code;
}
public static void main(String[] args) throws SOMToolboxException {
// testing the hash code generation
SharedSOMVisualisationData data = new SharedSOMVisualisationData();
System.out.println(data.dataHashCode());
Object data2 = "Test1";
data.setData(SOMVisualisationData.CLASS_INFO, data2);
System.out.println(data.dataHashCode());
data.setData(SOMVisualisationData.CLASS_INFO, "Test2");
System.out.println(data.dataHashCode());
data.setData(SOMVisualisationData.CLASS_INFO, data2);
System.out.println(data.dataHashCode());
}
}