/*
* RapidMiner
*
* Copyright (C) 2001-2011 by Rapid-I and the contributors
*
* Complete list of developers available at our web site:
*
* http://rapid-i.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;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.logging.Level;
import com.rapidminer.tools.FileSystemService;
import com.rapidminer.tools.LogService;
import com.vlsolutions.swing.docking.DockingContext;
import com.vlsolutions.swing.docking.ws.Workspace;
import com.vlsolutions.swing.docking.ws.WorkspaceException;
/**
*
* @author Simon Fischer
*
*/
public class Perspective {
private final String name;
private final Workspace workspace = new Workspace();
private boolean userDefined = false;;
private final ApplicationPerspectives owner;
public Perspective(ApplicationPerspectives owner, String name) {
this.name = name;
this.owner = owner;
}
public String getName() {
return name;
}
public Workspace getWorkspace() {
return workspace;
}
public void store(DockingContext dockingContext) {
try {
workspace.loadFrom(dockingContext);
} catch (WorkspaceException e) {
LogService.getRoot().log(Level.WARNING, "Cannot save workspace: "+e, e);
}
}
protected void apply(DockingContext dockingContext) {
try {
workspace.apply(dockingContext);
} catch (WorkspaceException e) {
LogService.getRoot().log(Level.WARNING, "Cannot apply workspace: "+e, e);
}
}
File getFile() {
return FileSystemService.getUserConfigFile("vlperspective-"+(isUserDefined()?"user-":"predefined-")+name+".xml");
}
public void save() {
File file = getFile();
OutputStream out = null;
try {
out = new FileOutputStream(file);
workspace.writeXML(out);
} catch (Exception e) {
LogService.getRoot().log(Level.WARNING, "Cannot save perspective to "+file+": "+e, e);
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) { }
}
}
public void load() {
LogService.getRoot().fine("Loading perspective: "+getName());
File file = getFile();
if (!file.exists()) {
return;
}
InputStream in = null;
try {
in = new FileInputStream(file);
workspace.readXML(in);
} catch (Exception e) {
if (!userDefined) {
LogService.getRoot().log(Level.WARNING, "Cannot read perspective from "+file+": "+e+". Restoring default.", e);
owner.restoreDefault(getName());
} else {
LogService.getRoot().log(Level.WARNING, "Cannot read perspective from "+file+": "+e+". Clearing perspective.", e);
workspace.clear();
}
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException e) { }
}
}
public void setUserDefined(boolean b) {
this.userDefined = b;
}
public boolean isUserDefined() {
return this.userDefined;
}
public void delete() {
File file = getFile();
if (file.exists()) {
file.delete();
}
}
}