/* ========================
* JSynoptic : a free Synoptic editor
* ========================
*
* Project Info: http://jsynoptic.sourceforge.net/index.html
*
* This program is free software; you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Foundation;
* either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307, USA.
*
* (C) Copyright 2001-2005, by :
* Corporate:
* Astrium SAS
* Individual:
* Ronan Ogor
*
* $Id: BuilderNodeJava3D.java,v 1.4 2007/06/05 14:32:30 ogor Exp $
*
* Changes
* -------
* 17 oct. 2005 : Creation date (RO);
*
*/
package syn3d.nodes.java3d;
import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import simtools.ui.ColorMapper;
import syn3d.base.ActiveNode;
import syn3d.base.PluginManager;
import syn3d.nodes.BuilderNode;
import syn3d.nodes.NodeResourcesManager;
import syn3d.nodes.SceneNode;
/**
* @author ogor
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class BuilderNodeJava3D extends BuilderNode implements Serializable{
static final long serialVersionUID = 2662447706232147011L;
protected PluginManager pluginManager;
public BuilderNodeJava3D(ActiveNode parent ,PluginManager pluginManager){
super(parent);
setName(NodeResourcesManager.getResources().getString("BuilderNodeName"));
this.pluginManager = pluginManager;
}
protected static List actions = new ArrayList();
static {
actions.addAll(Arrays.asList(new String[] {
NodeResourcesManager.getResources().getString("Open"),
}));
}
public List getActions() {
return actions;
}
public void doAction(Object action) {
if (action==null) return;
if (action.equals(NodeResourcesManager.getResources().getString("New"))) {
/*
mainBuiltin.createFromKey("Scene",this);
SceneNodeJava3D newScene = new SceneNodeJava3D(this, null);
newScene.setName(NodeResourcesManager.getResources().getString("SceneName")+ getChildren().size());
*/
}
if (action.equals(NodeResourcesManager.getResources().getString("Open"))) {
// Select a Systema file
Java3DPlugin3DFileFilter filter = new Java3DPlugin3DFileFilter();
JFileChooser chooser = new JFileChooser();
chooser.setAcceptAllFileFilterUsed(false);
chooser.setFileFilter(filter);
int returnVal = chooser.showDialog(null, NodeResourcesManager.getResources().getString("Open"));
if (returnVal == JFileChooser.APPROVE_OPTION){
loadJava3dScene(chooser.getSelectedFile());
}
}
}
public boolean loadJava3dScene(File f){
try {
FileInputStream fis = new FileInputStream(f);
ObjectInputStream is = new ObjectInputStream(fis);
Object o = is.readObject();
if ((o==null) || !(o instanceof SceneNode)) {
throw new java.io.IOException();
}
SceneNodeJava3D scene = (SceneNodeJava3D)o;
scene.setParent(this);
scene.setName((((f.getName().indexOf(".")) !=0)? (f.getName().substring(0,f.getName().indexOf("."))) : f.getName()));
// Read color mappers
o = is.readObject();
if ((o!=null) && (o instanceof Vector)) {
for (Iterator it = ((Vector)o).iterator(); it.hasNext(); ) {
Object ito = it.next();
if (!(ito instanceof ColorMapper)) continue;
if (ColorMapper.colorMappers==null) ColorMapper.colorMappers = new Vector();
if (!ColorMapper.colorMappers.contains(ito)) ColorMapper.colorMappers.add(ito);
}
}
is.close();
fis.close(); // also closes the file
// Then, restore references between nodes and update the scene
scene.restoreReferences(this);
// Restore parameter related to the loaded scene
scene.restoreScene(pluginManager);
} catch (Exception e) {
System.err.println(NodeResourcesManager.getResources().getStringValue("cannotLoadFile") + f.getName());
return false;
}
System.err.println(NodeResourcesManager.getResources().getStringValue("loadOK") + f.getName());
return true;
}
class Java3DPlugin3DFileFilter extends FileFilter{
public boolean accept(File f) {
if (f.isDirectory()) return true;
String name = f.getName();
return name.toLowerCase().endsWith("." + NodeResourcesManager.getResources().getStringValue("Java3DFilterExtension"));
}
public String getDescription() {
return NodeResourcesManager.getResources().getStringValue("Java3DFilterDescription") + " (*." + NodeResourcesManager.getResources().getStringValue("Java3DFilterExtension") + ")";
}
}
}